1

我有一个要求,首先,我必须检查文件是否存在于给定的 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"

请帮助我。

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

如何处理这种情况?

4

2 回答 2

1

oozie EL 函数/表达式使用 JSP 表达式语言语法。来自 oozie 的文档

您可以查看JSP 2.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>
于 2017-01-27T20:23:27.690 回答
0

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

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

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

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

借助下面的代码,我们可以实现上述功能。

<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>  
于 2016-09-21T14:44:59.853 回答