我首先要求,我必须在给定的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"
那样发送电子邮件通知。
请帮助我。
在这种情况下如何使用逻辑运算符(&&,||)?
如何处理这种情况?
答案 0 :(得分:1)
oozie EL函数/表达式使用JSP表达式语言语法。 from oozie's doc
您可以查看JSP 2.0 specification以获取语法。
特别针对您的问题,答案是:
<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>
答案 1 :(得分: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>