jar ファイル (mymapreduce.jar) としてパックされた mapreduce ジョブがあります。実行時には、hadoop jar mymapreduce.jar StartClass -i input -p parameter1 -u parameter2 など、いくつかのパラメーターが必要です。Oozie ワークフロー ファイルにアクションとして記述するにはどうすればよいですか?
質問する
3611 次
2 に答える
1
Java アクションを使用して mapreduce ジョブを呼び出すことができます。mapreduce ドライバー クラスはメインクラスとして指定する必要があります。また、必要なパラメーターを引数として渡すこともできます。パラメーター解析ロジックは、ドライバー クラスで定義する必要があります。
<workflow-app name="mapreduce-wf" xmlns="uri:oozie:workflow:0.4">
<start to="mapreduce_node"/>
<action name="mapreduce_node">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>com.test.MyMapreduceDriver</main-class>
<arg>-i</arg>
<arg>-p</arg>
<arg>parameter1</arg>
<arg>-u</arg>
<arg>parameter2</arg>
</java>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
別のオプションは、mapreduce アクションとして実行することです。ドライバー クラスが指定されないため、必要なパラメーターを構成プロパティとして他の mapreduce プロパティに追加して渡すことができます。構成オブジェクトを使用して、mapper および reducer クラス内でこれらのパラメーターにアクセスできます。
<workflow-app name='mapreduce-wf' xmlns="uri:oozie:workflow:0.2">
<start to='mapreduce'/>
<action name='mapreduce'>
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
</prepare>
<configuration>
<property>
<name>p</name>
<value>parameter1</value>
</property>
<property>
<name>u</name>
<value>parameter2</value>
</property>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<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='end'/>
<error to='end'/>
</action>
<kill name='kill'>
<value>${wf:errorCode("mapreduce")}</value>
</kill/>
<end name='end'/>
</workflow-app>
于 2015-04-17T00:08:12.600 に答える
1
次のように、oozie ワークフローで使用するパラメーターを job.properties ファイルに記述します。
nameNode=hdfs://localhost:9000
hdfs://abc.xyz.yahoo.com:8020
jobTracker=localhost:9001
queueName=default
examplesRoot=map-reduce
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}
inputDir=/user/input-data
outputDir=/user/map-reduce
次のように、workflow.xml の job.properties で定義された構成と変数を追加できます。
<workflow-app name='wordcount-wf' xmlns="uri:oozie:workflow:0.2">
<start to='wordcount'/>
<action name='wordcount'>
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
</prepare>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<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='end'/>
<error to='end'/>
</action>
<kill name='kill'>
<value>${wf:errorCode("wordcount")}</value>
</kill/>
<end name='end'/>
</workflow-app>
お役に立てれば。
于 2015-04-16T23:34:57.283 に答える