2015-10-13 181 views
1

我有一个将调用shell文件的oozie工作流,Shell文件将进一步调用mapreduce作业的驱动类。现在我想将我的oozie jobId映射到Mapreduce jobId以供以后使用。有没有办法在工作流文件中获取oozie jobId,以便我可以将相同的参数传递给我的驱动程序类进行映射。如何在oozie工作流程中获得oozie jobId?

以下是我的样本workflow.xml文件

<workflow-app xmlns="uri:oozie:workflow:0.4" name="test"> 
<start to="start-test" /> 
<action name='start-test'> 
    <shell xmlns="uri:oozie:shell-action:0.2"> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     <configuration> 
      <property> 
       <name>mapred.job.queue.name</name> 
       <value>${queueName}</value> 
      </property> 
     </configuration> 
     <exec>${jobScript}</exec> 
     <argument>${fileLocation}</argument> 
     <argument>${nameNode}</argument> 
     <argument>${jobId}</argument> <!-- this is how i wanted to pass oozie jobId --> 
     <file>${jobScriptWithPath}#${jobScript}</file> 
    </shell> 
    <ok to="end" /> 
    <error to="kill" /> 
</action> 
<kill name="kill"> 
    <message>test job failed 
     failed:[${wf:errorMessage(wf:lastErrorNode())}]</message> 
</kill> 
<end name="end" /> 

以下是我的shell脚本。

hadoop jar testProject.jar testProject.MrDriver $1 $2 $3 

回答

4

尝试使用${wf:id()}

字符串WF:ID()

它返回当前工作流任务工作流任务ID。

More info here.

+0

谢谢队友。有用。 – Vijayakumar

1

Oozie的滴在运行shell(以下简称“发射器”容器)纱线容器的CWD一个XML文件,并设置一个环境变量指向的是XML (不记得名字虽然)

该XML包含很多内容,如工作流程名称,操作名称,两者ID,运行尝试编号等。 因此,您可以在shell脚本本身中将sed这些信息返回。

当然通过ID(如Alexei所建议的)会更清洁,但有时“干净”不是最好的方法。特别是如果你担心它是否是第一次运行...