无法阻止Oozie逻辑炸弹

时间:2018-12-17 09:15:24

标签: hadoop fork infinite-loop oozie

我正在使用Oozie作为任务管理器的Hadoop集群。我的一个队友犯了一个错误,并在集群上运行了以下oozie工作流程:

<?xml version="1.0" encoding="UTF-8"?>
<!-- A adapter ... -->
<workflow-app xmlns="uri:oozie:workflow:0.5" name="My-Workflow">
    <global>
        <job-tracker>${wf:conf('oozie.job.tracker')}</job-tracker>
        <name-node>${wf:conf('oozie.name.node')}</name-node>
        <configuration>
            <property>
                <name>oozie.launcher.mapred.job.queue.name</name>
                <value>${wf:conf('queueName')}</value>
            </property>
        </configuration>
    </global>

    <start to="compute-start"/>

    <fork name="compute-start">
        <path start="ci_mr-workflow"/>
        <path start="ci_mr_rem-workflow"/>
        <path start="ci_reg-workflow"/>
        <path start="ci_reg_read-workflow"/>
        <path start="ci_sp_geo-workflow"/>
        <path start="ci_sp_mtr_hist-workflow"/>
        <path start="cm_c_mr_bloc-workflow"/>
    </fork>


    <!-- Sub Workflows -->

    <action name="ci_mr-workflow">
        <sub-workflow>
            <app-path>${wf:conf('app.dir')}/oozie/ci_mr-workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="compute-end"/>
        <error to="fail"/>
    </action>

    <action name="ci_mr_rem-workflow">
        <sub-workflow>
            <app-path>${wf:conf('app.dir')}/oozie/ci_mr_rem-workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="compute-end"/>
        <error to="fail"/>
    </action>

    <action name="ci_reg-workflow">
        <sub-workflow>
            <app-path>${wf:conf('app.dir')}/oozie/ci_reg-workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="compute-end"/>
        <error to="fail"/>
    </action>

    <action name="ci_reg_read-workflow">
        <sub-workflow>
            <app-path>${wf:conf('app.dir')}/oozie/ci_reg_read-workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="compute-end"/>
        <error to="fail"/>
    </action>

    <action name="ci_sp_geo-workflow">
        <sub-workflow>
            <app-path>${wf:conf('app.dir')}/oozie/ci_sp_geo-workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="compute-end"/>
        <error to="fail"/>
    </action>

    <action name="ci_sp_mtr_hist-workflow">
        <sub-workflow>
            <app-path>${wf:conf('app.dir')}/oozie/ci_sp_mtr_hist-workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="compute-end"/>
        <error to="fail"/>
    </action>

    <action name="cm_c_mr_bloc-workflow">
        <sub-workflow>
            <app-path>${wf:conf('app.dir')}/oozie/cm_c_mr_bloc-workflow.xml</app-path>
            <propagate-configuration/>
        </sub-workflow>
        <ok to="compute-end"/>
        <error to="fail"/>
    </action>

    <join name="compute-end" to="end"/>


    <kill name="fail">
        <message>Job failed, error message: ${wf:errorMessage(wf:lastErrorNode())}</message>
    </kill>

    <end name="end"/>
</workflow-app>

以及子工作流程的示例:

<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.5" name="My_Subworkflow">
    <global>
        <job-tracker>${wf:conf('oozie.job.tracker')}</job-tracker>
        <name-node>${wf:conf('oozie.name.node')}</name-node>
        <configuration>
            <property>
                <name>oozie.launcher.mapred.job.queue.name</name>
                <value>${wf:conf('queueName')}</value>
            </property>
        </configuration>
    </global>

    <start to="oracle-compute-ci_mr_rem"/>

    <action name="oracle-compute-ci_mr_rem">
        <sub-workflow>
            <app-path>${wf:conf('app.dir')}/oozie/_Oracle-workflow.xml</app-path>
            <propagate-configuration/>
            <configuration>
                <property>
                    <name>computeName</name>
                    <value>ci_mr_rem</value>
                </property>
                <property>
                    <name>computeTargetName</name>
                    <value>ci_mr_rem</value>
                </property>
                <property>
                    <name>computeFullPath</name>
                    <value>ci_mr_rem</value>
                </property>
                <property>
                    <name>computeType</name>
                    <value>Objects</value>
                </property>
                <property>
                    <name>computeSourceType</name>
                    <value>SourceType</value></value>
                </property>
                <property>
                    <name>computeSourceName</name>
                    <value>SourceName</value>
                </property>
            </configuration>
        </sub-workflow>
        <ok to="compute-end"/>
        <error to="fail"/>
    </action>

    <join name="compute-end" to="end"/>

    <kill name="fail">
        <message>Job failed, error message: ${wf:errorMessage(wf:lastErrorNode())}</message>
    </kill>

    <end name="end"/>
</workflow-app>

自从此工作流成为逻辑炸弹以来,它就无限地复制自身(及其子工作流)...我想“ fork”操作会将父工作流复制到子工作流中(就像程序过程一样)。

我迅速删除了工作流程文件和目录并运行了命令:

oozie jobs -kill -filter user=my_user

但这并不会停止该过程,作业仍然存在并且正在复制。

需要帮助,有什么主意吗?

1 个答案:

答案 0 :(得分:0)

重新启动集群。 Oozie作业将不会重新启动。