@xtccc
2016-01-27T13:38:43.000000Z
字数 2102
阅读 5452
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成功运行了:

