Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在OOZIE决策节点中使用逻辑运算符?_Shell_Hadoop_Oozie_Oozie Coordinator_Cloudera Quickstart Vm - Fatal编程技术网

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

Shell 如何在OOZIE决策节点中使用逻辑运算符?,shell,hadoop,oozie,oozie-coordinator,cloudera-quickstart-vm,Shell,Hadoop,Oozie,Oozie Coordinator,Cloudera Quickstart Vm,我有这样的要求,首先,我必须检查文件是否存在于给定的HDFS位置 若文件存在,那个么我必须测试大于200字节的文件大小 基于这两个结果,我必须向用户发送电子邮件通知 我可以通过下面的代码检查文件是否存在 ${fs:exists("/user/cloudera/trdat/test.txt")} ${fs:fileSize("/user/cloudera/trdat/test.txt") gt 200 * B} 我可以用下面的代码检查文件大小 ${fs:exists("/user/cloude

我有这样的要求,首先,我必须检查文件是否存在于给定的HDFS位置

若文件存在,那个么我必须测试大于200字节的文件大小

基于这两个结果,我必须向用户发送电子邮件通知

我可以通过下面的代码检查文件是否存在

${fs:exists("/user/cloudera/trdat/test.txt")}
${fs:fileSize("/user/cloudera/trdat/test.txt") gt 200 * B}
我可以用下面的代码检查文件大小

${fs:exists("/user/cloudera/trdat/test.txt")}
${fs:fileSize("/user/cloudera/trdat/test.txt") gt 200 * B}
我必须创建一个工作流程来检查文件是否存在,如果不存在,则发送电子邮件通知
“文件不存在”
,就像发送给用户的消息一样

如果存在,那么我们必须检查文件大小是否大于200字节。如果没有,我必须发送电子邮件通知,如
“文件存在,但没有数据”
,如该消息

请帮我做这个

在这种情况下如何使用逻辑运算符(&&,| |)


如何处理这种情况

首先,我们需要检查决策一,即文件是否存在

如果不存在,则默认文件丢失通知

如果文件只存在,我们必须检查文件的大小

如果文件大小小于给定大小,则只有我们必须发送失败通知

通过下面的代码帮助,我们可以实现上述功能

<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>  

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

oozie EL函数/表达式使用JSP表达式语言语法

您可以检查以获取语法

对于你的问题,答案是:

<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>

${(fs:exists(“/user/cloudera/trdat/test.txt”))
和
(fs:fileSize(“/user/cloudera/trdat/test.txt”)gt 200*B)
/案例>

您的问题可能重复,这让人非常困惑,显然,您也是。您有3个不同的案例,具有明确的优先级。因此,您需要一个包含3个分支的决策“goto SendMailA如果不存在;goto SendMailB如果太小;goto end”。在这种情况下不需要和/或操作员。感谢您的及时回复@YoungHobbit,Samson scharflichter。我找到了解决办法