Mapreduce 同时多次提交同一oozie工作流作业

Mapreduce 同时多次提交同一oozie工作流作业,mapreduce,oozie,Mapreduce,Oozie,我想知道当我同时提交两个相同的工作流作业(仅仅是oozie示例)时,oozie如何处理冲突(如果真的存在)。 我可以提交相同的两个作业成功,oozie服务器返回两个不同的作业ID。在oozie Web控制台中,我看到两个作业的状态都在运行,然后在一段时间后全部成功。 My workflow.xml作为追随者: <workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf"> <start to="mr-

我想知道当我同时提交两个相同的工作流作业(仅仅是oozie示例)时,oozie如何处理冲突(如果真的存在)。 我可以提交相同的两个作业成功,oozie服务器返回两个不同的作业ID。在oozie Web控制台中,我看到两个作业的状态都在运行,然后在一段时间后全部成功。 My 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>

${jobTracker}
${nameNode}
mapred.job.queue.name
违约
mapred.mapper.class
org.apache.oozie.example.SampleMapper
mapred.reducer.class
org.apache.oozie.example.sampleEducer
mapred.map.tasks
1.
mapred.input.dir
/user/${wf:user()}/mapreduce\u测试/输入
mapred.output.dir
/user/${wf:user()}/mapreduce\u测试/输出数据/
映射/减少失败,错误消息[${wf:errorMessage(wf:lastErrorNode())}]
我知道在“prepare”标签中,delete output目录有助于使操作可重复,并允许在失败后重试,我还了解基本的操作运行模型

因此,我的问题是:

  • 这两个作业实际上是同时运行的(我在oozie web控制台中看到这两个作业都处于运行状态)
  • 是否存在写入冲突?(两个相同的作业点一个输出目录)

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

    这两个作业实际上是同时运行的(我在oozie web控制台中看到这两个作业都处于运行状态)

    对。这两个作业将同时运行

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

    Oozie没有任何与
    写入冲突相关的检查。我想这些都是由map reduce或hdfs框架解决的。

    根据您的问题: 1.Oozie将集群上的作业安排为执行,直到结束,状态为success/failure。 2.两个作业将同时运行,并将执行已定义的相同操作

    为了避免同样的情况,您可以执行以下步骤,这将有点帮助

    As Oozie作业通过触发job.properties或coordinator.properties开始执行,并根据通过job.xml/coordinator.xml传递的提及间隔启动工作流以执行

    因此,一旦有请求被提交,就必须重新输入

    协调员的协调工作和工作流的WF工作

    Oozie{的Metastore DB中的表可以是“Oracle/MySQL/Postgress/Derby”

    因此,即使作业已被触发,也可以重复启动,因为每次为受尊重的作业设置新ID时。{as COORDINATOR作业ID已设置为增量基础}

    一种避免重复处理同一作业的方法是,可以从Metastore DB端执行一些验证检查

    在Metastore DB下为COORD_JOBS表创建一个触发器,该触发器将检查带有Job Name的表条目,query like

      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表中的这些DB表触发器都会进行检查


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

    您可以在不同的
    jobTracker
    s上运行多个工作流,执行不同的操作,并且所有这些都标记为FooBar。Oozie不在乎。但是……如果您使用Coordinator来运行工作流,那么可以定义并发规则(例如,一次只能定义一个,FIFO)。