Mapreduce 同时多次提交同一oozie工作流作业
我想知道当我同时提交两个相同的工作流作业(仅仅是oozie示例)时,oozie如何处理冲突(如果真的存在)。 我可以提交相同的两个作业成功,oozie服务器返回两个不同的作业ID。在oozie Web控制台中,我看到两个作业的状态都在运行,然后在一段时间后全部成功。 My workflow.xml作为追随者: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-
<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没有检测到任何作业重复或类似的情况。它接受工作流作业,并将它们安排在集群上执行和监视,直到完成或失败 这两个作业实际上是同时运行的(我在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)。