@xtccc
2016-01-27T21:38:43.000000Z
字数 2102
阅读 5037
Oozie
参考链接:
需求
通过Oozie的REST API提交一个Spark Workflow,运行一个WordCount程序。该Job相关的几个参数如下:
- Jar
spark.examples-1.0-SNAPSHOT.jar
- Main Class
cn.gridx.spark.examples.basic.WordCount
- HDFS Input Path
/user/admin/data/in
- HDFS Output Path
/user/admin/data/out
实现步骤
在HDFS上创建一个目录 /user/admin/workspaces
,将它作为Oozie workflow的工作空间。
将Spark Job的Jar包上传到HDFS目录/user/admin/workspaces/lib
中,然后创建HDFS文件/user/admin/workspaces/workflow.xml
,其内容如下:
<workflow-app name="Submit-Spark-WF-From-REST" xmlns="uri:oozie:workflow:0.5">
<start to="startNode"/>
<kill name="killNode">
<message>Action failed,
error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="startNode">
<spark xmlns="uri:oozie:spark-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<master>yarn-client</master>
<mode>client</mode>
<name>MySparkAction</name>
<class>cn.gridx.spark.examples.basic.WordCount</class>
<jar>lib/spark.examples-1.0-SNAPSHOT.jar</jar>
<arg>${inPath}</arg>
<arg>${outPath}</arg>
</spark>
<ok to="okNode"/>
<error to="killNode"/>
</action>
<end name="okNode"/>
</workflow-app>
其中,${inPath}
和${outPath}
是需要传给主类的两个参数。
在本地创建一个文件config.xml
,其内容如下:
<configuration>
<property>
<name>oozie.use.system.libpath</name>
<value>True</value>
</property>
<property>
<name>security_enabled</name>
<value>False</value>
</property>
<property>
<name>user.name</name>
<value>admin</value>
</property>
<property>
<name>oozie.wf.application.path</name>
<value>${nameNode}/user/${user.name}/workspaces</value>
</property>
<property>
<name>nameNode</name>
<value>[NameNode-HOST]:8020</value>
</property>
<property>
<name>jobTracker</name>
<value>[ResourceManager-HOST]:8032</value>
</property>
<property>
<name>inPath</name>
<value>${nameNode}/user/${user.name}/data/in</value>
</property>
<property>
<name>outPath</name>
<value>${nameNode}/user/${user.name}/data/out</value>
</property>
</configuration>
由于我们的Spark是运行在YARN之上的,所以这里的jobTracker
要改为YARN ResourceManager的地址。
在该节点上执行命令:
curl -X POST -H "Content-Type: application/xml" \
-d @config.xml "http://[oozie-server]:11000/oozie/v2/jobs?action=start"
即可提交这个Spark Workflow。
通过HUE界面可以看到这个Workflow成功运行了: