@xtccc
2016-01-23T00:19:16.000000Z
字数 2210
阅读 10243
Oozie
版本: CDH 5.5.1
以 admin 用户登录到HUE。
在浏览器中依次点击【Workflows】 -> 【Editors】 ->【Wokflows】,进入Workflow Editor,然后点击【Create】。

点击右上角的【Settings】按钮,出现一个弹出窗口,我们可以在这里为Workflow设置变量名,并设置Workspace。现在,添加input和output这两个变量,并将Workspace设置为HDFS的目录/user/admin/workspaces,如下:
设置好后,点击右上角的叉关闭这个弹出窗口,回到之前的页面(现在还需要自己将Spark Job所需的Jar包放入相应的HDFS目录中)。
我们将【Spark】图标拖到相应的位置,然后继续进行设置。我们设置了Jar包的路径 lib/oozie-examples.jar,注意这是HDFS路径,且是相对于Workspace的路径(所以实际路径就是/user/admin/workspaces/lib/oozie-examples.jar);还要设置main class。
由于这个main class的作用的是复制HDFS的文件,它在运行时需要给main方法传入两个参数,分别是src path和dest path,所以这里我们继续添加参数,如下图:

这里的${input}和${output}就是之前我们在【settings】中设置的变量名。
好了,一切都设置好了之后,点击右上角的【Save】按钮。
点击页面上的【Submit】按钮,即可提交该Workflow Job。等待一段时间后,如果成功结束,我们可以在HDFS中看到成功地生成了输出目录/user/admin/Here。
并且,我们在Workspace(/user/admin/workspaces)中还能看到自动上传的两个文件 —— job.properties与workflow.xml。它们的内容如下:
# job.properties文件oozie.use.system.libpath=Truesecurity_enabled=Falsedryrun=FalsenameNode=hdfs://nameservice1output=Hereinput=/user/hue/oozie/workspaces/data/sonnets.txt
<!-- workflow.xml文件 --><workflow-app name="My_Workflow" xmlns="uri:oozie:workflow:0.5"><start to="spark-a8b9"/><kill name="Kill"><message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message></kill><action name="spark-a8b9"><spark xmlns="uri:oozie:spark-action:0.1"><job-tracker>${jobTracker}</job-tracker><name-node>${nameNode}</name-node><master>local[*]</master><mode>client</mode><name>MySpark</name><class>org.apache.oozie.example.SparkFileCopy</class><jar>lib/oozie-examples.jar</jar><arg>${input}</arg><arg>${output}</arg></spark><ok to="End"/><error to="Kill"/></action><end name="End"/></workflow-app>
现在有1个Spark App Jar,里面含有2个main class,分别如下:
| 主类 | 作用 |
|---|---|
| cn.gridx.spark.examples.basic.WordCount | 对输入路径input中的文本文件进行wordcount计算,将结果以文本形式输出到输出路径output中 |
| cn.gridx.spark.examples.basic.AppendNum | 将WordCount的计算结果作为输入,在每一行文本前面加上序号,然后再输出到HDFS的一个文本文件中 |


如果JAR没有被放在Workspace中,或者它的权限不够,在运行时可能会出现main class找不到的异常:
java.lang.ClassNotFoundException: org.apache.oozie.examples.SparkFileCopy
另外,如果以yarn-cluster模式提交,则要填写HDFS的完整路径,都则会找不到这个JAR包。
