@xtccc
2016-01-23T08:19:16.000000Z
字数 2210
阅读 9421
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=True
security_enabled=False
dryrun=False
nameNode=hdfs://nameservice1
output=Here
input=/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包。