如何在oozie决策节点中使用逻辑运算符?

nnsrf1az  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(373)

我有这样的要求:首先,我必须检查文件是否存在于给定的hdfs位置。
如果文件存在,那么我必须测试大于200字节的文件大小。
基于这两个结果,我必须发送电子邮件通知给用户。
我可以通过下面的代码检查文件是否存在

${fs:exists("/user/cloudera/trdat/test.txt")}

我可以用下面的代码检查文件大小

${fs:fileSize("/user/cloudera/trdat/test.txt") gt 200 * B}

我必须创建一个工作流程来检查文件是否存在,如果不存在发送电子邮件通知 "file is not exist" 就像给用户的信息。
如果存在,那么我们必须检查文件大小是否大于200字节。如果没有,我必须发送电子邮件通知,如 "file is exist but no data" 就像那个信息。
请帮我解决这个问题。
在这种情况下,如何使用逻辑运算符(&&,| |)?
如何处理这种情况?

ijnw1ujt

ijnw1ujt1#

首先,我们需要检查决策一,即文件是否存在。
如果不存在默认文件丢失通知。
如果文件只存在,我们必须检查文件的大小。
如果文件大小小于给定的大小,那么只有我们必须发送失败通知。
通过下面的代码帮助,我们可以实现上述功能。

<decision name="decision1">
       <switch>
         <case to="day0">
          ${fs:exists("/user/cloudera/trdat/test.txt")}
         </case>
        <default to="FileMissing" />
       </switch>
  </decision>

 <action name="day0">
   <email xmlns="uri:oozie:email-action:0.1">
   <to>......</to>
   <subject>.....</subject>
   </email>
  <ok to="decision2"/>
  <error to="end"/>
 </action>

 <action name="FileMissing">
 ................................
</action>

 <decision name="decision2">
       <switch>
         <case to="day1">
         ${fs:fileSize("/user/cloudera/trdat/test.txt") gt 200 * B}
         </case>
        <default to="DATAMissing" />
       </switch>
  </decision>
   <action name="day1">
   <email xmlns="uri:oozie:email-action:0.1">
   <to>......</to>
   <subject>.....</subject>
   </email>
  <ok to="Ok"/>
  <error to="end"/>
 </action>

 <action name="DATAMissing">
 ................................
</action>
e5nszbig

e5nszbig2#

oozie el函数/表达式使用jsp表达式语言语法。从oozie的医生那里
您可以检查jsp2.0规范以获得语法。
具体到你的问题,答案是:

<decision name="node_name">
  <switch>
    <case to="node_1">
      ${(fs:exists("/user/cloudera/trdat/test.txt"))
         and
        (fs:fileSize("/user/cloudera/trdat/test.txt") gt 200 * B)}
    /case>
    <default to="end"/>
  </switch>
</decision>

相关问题