hadoop - 处理 oozie 工作流中的循环

标签 hadoop oozie

我有一个 oozie 用例,用于检查输入数据的可用性并根据数据的可用性触发 mapreduce 作业。 所以我写了一个 shell 脚本来检查输入数据,并在 oozie 中为它创建了一个 ssh 操作,

输入数据检查的重试次数和重试间隔应该是可配置的,并且在每次重试后如果数据仍然丢失我必须发送警报,在指定的重试次数后 mapreduce 作业可以从可用数据开始

我写了一个工作流程如下:

<start to="datacheck" />

<action name="datacheck">
    <ssh xmlns="uri:oozie:ssh-action:0.1">
        <host>${sshUserHost}</host>
        <command>${Oozieutilsscript}</command>
    </ssh>
    <ok to="datacheckswitch" />
    <error to="fail" />
</action>

<decision name="datacheckswitch">
    <switch>
        <case to="mapreduce">${(wf:actionData('datacheck')['datatransfer'] == "complete" )}</case>
        <case to="retry">${(wf:actionData('datacheck')['datatransfer'] == "incomplete" )}</case>        
        <default to="fail" />    
    </switch>
</decision>

<action name="retry">
    <ssh xmlns="uri:oozie:ssh-action:0.1">
        <host>${sshUserHost}</host>
        <command>${Oozieutilsscript1}</command>
    </ssh>
    <ok to="retryswitch" />
    <error to="fail" />
</action>

<decision name="retryswitch">
    <switch>
        <case to="datacheck">${(wf:actionData('datacheck')['retry'] == "notfinished" )}</case>
        <case to="datacheck">${(wf:actionData('datacheck')['retry'] == "finished" )}</case>     
        <default to="fail" />    
    </switch>
</decision>

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


<!--Kill and End portion-->
<kill name="fail">
    <message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}</message>
</kill>
<end name="end" />

只有当我执行工作流时,我才知道 oozie 不支持循环,因为它的工作流是 DAG。收到错误错误:E0707:E0707:在解析时检测到循环,节点 [datacheck] 在解析 workflow.xml 时

是否有任何不同的方法来处理这个用例?

感谢任何帮助。

最佳答案

您可以使用递归来模拟循环。关键思想是工作流使用指向包含操作节点的工作流文件的子工作流操作调用自身。

必须使用决策节点停止递归。

在我的博客上你可以找到a complete example为此。

关于hadoop - 处理 oozie 工作流中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17684647/

相关文章:

hadoop - 在 5 节点集群的每个节点上设置多代理 kafka

ssh - 使用带有私钥的 Oozie ssh 操作

java - 如何检查 LoadApplicationService 的完成状态?

hadoop - 为什么oozie向yarn提交shell Action ?

hadoop - YARN作为SOA框架

multithreading - 使用 spark-submit,--total-executor-cores 选项的行为是什么?

hadoop - 从oozie运行时,nutch 1.7会将更改文件系统保留为本地文件

hadoop - 配置单元脚本/操作工作流失败:启动器异常:java.lang.RuntimeException

hadoop - 如何配置 Hadoop 2.2 以适应这种情况?

json - HQL返回ISO时间戳