同时多次提交相同的oozie工作流作业

时间:2016-01-08 02:48:39

标签: mapreduce oozie

我想知道当我同时提交两个相同的工作流程工作(只是Oozie示例示例)时,oozie如何处理冲突(如果确实存在)。 我可以提交相同的两个工作成功和oozie服务器返回两个不同的jobId.In Oozie Web控制台,我看到两个工作的状态都是RUNNING,然后所有SUCCEEDED一段时间后。 我的workflow.xml作为关注者:

<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf">
    <start to="mr-node"/>
    <action name="mr-node">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <prepare>
                <delete path="${nameNode}/user/${wf:user()}/mapreduce_test/output-data"/>
            </prepare>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>default</value>
                </property>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.apache.oozie.example.SampleMapper</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.apache.oozie.example.SampleReducer</value>
                </property>
                <property>
                    <name>mapred.map.tasks</name>
                    <value>1</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>/user/${wf:user()}/mapreduce_test/input</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>/user/${wf:user()}/mapreduce_test/output-data/</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

我知道在“准备”标签中删除输出目录有助于使动作可重复并在失败后启用重试,我也了解基本动作运行模型。

所以,我的问题是:

  1. 同时运行两个作业?(我在oozie web控制台中看到两个都处于运行状态)。
  2. 是否存在写冲突?(两个相同的工作点一个输出目录)

2 个答案:

答案 0 :(得分:0)

Oozie没有检测到任何工作重复或任何类似的工作。它接受工作流作业并在集群上安排它们以便执行和监视,直到完成或失败。

  

同样的两个作业真的同时运行了吗?(我看到这两个作业都在oozie web控制台中处于运行状态)。

是。这两个工作将同时运行。

  

是否存在写冲突?(两个相同的工作点一个输出目录)

Oozie没有与write conflicts相关的任何检查。我猜这些都是map reduce或hdfs框架。

答案 1 :(得分:0)

根据您的问题: 1. Oozie在集群上调度作业,直到结束,状态如成功/失败。 2.两个作业都将同时运行,并将执行已定义的相同操作。

要避免使用相同的内容,您可以执行下面的步骤,这些步骤会有所帮助。

Oozie Jobs通过触发job.properties或coordinator.properties开始执行,并按照通过job.xml / coordinator.xml传递的提及间隔启动工作流程。

因此,当提交请求时,它会在

中重新输入
  

协调员的COORD_JOBS和工作流程的WF_JOBS

Oozie的Metastore DB中的表格{可能是&#34; Oracle / MySQL / Postgress / Derby&#34;。

因此,即使已触发作业,也可以在每次为尊重的作业设置新ID时重复开始。 {将COORDINATOR JOB ID设置为增量基础}。

避免重复处理同一作业的一种方法是,您可以通过Metastore数据库结束进行一些验证检查。

在Metastore DB下为COORD_JOBS表创建一个触发器,它将使用作业名称检查表条目,查询类似

  IF (SELECT COUNT(*) FROM COORD_JOBS WHERE (app_name = NEW.app_name) AND (status="RUNNING")) > 0 THEN
    SET NEW='Error: Cannot Update table.';
  END IF;

每次Oozie尝试使用新作业进行更新时,COORD_JOBS / WF_JOBS表中的这些数据库表触发器都会进行检查。

COORD_JOBS表可以替换为WF_JOBS表,该表存储由Coordinator.properties启动的工作流作业详细信息,