我需要根据匹配同一个表的不同文件集运行多个mapreduce作业。我正在探索Oozie,但我完全不知道Oozie。
我的要求就像是 1.根据时间限制(和/或)文件绑定运行作业 2.如果某些文件不可用,则应跳过该步骤 3.用户应该能够配置每个步骤应该是什么步骤和优先级。
任何人都可以建议Oozie是否符合我的要求?如果是这样,我该如何完成?
如果没有,是否有任何类似于Visual Cron的免费或商业工具,我们打算替换它们来运行map reduce和基于java的工作?
答案 0 :(得分:1)
基本上,您希望在一天中的预定时间根据数据可用性运行oozie工作流以收集MR作业。您需要定义Decision
节点以检查数据是否存在以及mapreduce
操作以运行mapreduce作业。您可以定义邮件通知功能以及作业失败。您可以在MapReduce Node,Decision Node,Oozie Actions Documentation找到详细信息。我已经提供了一个示例decision
节点和mapreduce
节点以及job.properties
文件。以下是运行oozie工作流程的命令。您可以将其安排为cron,以便在给定时间每天运行它。
oozie job -config job.properties -D param1=value -run
<workflow-app xmlns="uri:oozie:workflow:0.4" name="${app_name}">
<global>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
</configuration>
</global>
<start to="data1_check"/>
<decision name="data1_check">
<switch>
<case to="data1_job">${fs:exists(input-data)}</case>
<default to="data2_check"/>
</switch>
</decision>
<action name='data1_job'>
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
</prepare>
<configuration>
<property>
<name>mapred.mapper.class</name>
<value>org.myorg.WordCount.Map</value>
</property>
<property>
<name>mapred.reducer.class</name>
<value>org.myorg.WordCount.Reduce</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>${inputDir}</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>${outputDir}</value>
</property>
</configuration>
</map-reduce>
<ok to="data2_check"/>
<error to="data2_check"/>
</action>
###Here we are going to data2_check decision node for both failure and success.
Because you want to run the next data job to run. You can stop the work flow by sending it to kill node failure.
###Your Last MR action will go to 'kill' node for failure and 'end' node for success.
<kill name="fail">
<message>Errormessage[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end" />
</workflow-app>
以下是job.properties
文件。
nameNode=hdfs://localhost:9000 # or use a remote-server url. eg: hdfs://abc.xyz.yahoo.com:8020
jobTracker=localhost:9001 # or use a remote-server url. eg: abc.xyz.yahoo.com:50300
queueName=default
examplesRoot=map-reduce
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}
inputDir=input-data
outputDir=map-reduce
答案 1 :(得分:1)
引用“Oozie Coord Use Cases”(来自在开源之前实际使用Oozie的人 - 并且到目前为止仍然是最大的用户)
以下是Oozie协调器引擎的一些典型用例。
- 您希望每天下午2点(类似于CRON)运行您的工作流程。
- 您希望每小时运行一次工作流程,并且还希望等待HDFS上的特定数据Feed
- 您希望运行依赖于其他工作流程的工作流程。
继续教程。
而且,BTW,Oozie的最新版本是V4.2 =&gt; Coordinator
的文档