[关闭]
@xtccc 2016-01-20T13:32:41.000000Z 字数 5411 阅读 4233

Oozie入门

给我写信
GitHub

此处输入图片的描述

Oozie




本文适用版本: Oozie 4.1.0

目录


1 基础


1.1 概念

1.2 Workflow

定义workflow的语言是XML,称为hPDL(Hadoop Process Definition Language)。

一个workflow app是一个ZIP文件,包含workflow定义(一个xml文件)以及运行actions所需的全部文件(jar files for MR job, shell for streaming MR job, native libraries, Pig scripts, etc.)


1.2.1 Workflow 状态

一个workflow job可以有以下状态:

1.2.2 Nodes

一个workflow实际上就是由控制流节点(control flow nodes)和动作节点(action nodes)构成的DAG。



下面具体介绍这些nodes。


1.3 Action Nodes

1.3.1 同步性

由action node触发的所有计算/处理任务都是异步执行的。大部分由workflow action触发的计算/处理任务,workflow job都要等到所有的任务都运行完毕之后,才能转移至workflow中的下一个节点。

但是fs action除外:这是一个asynchronous action

1.3.2 action的完成

Oozie可以通过callbackpolling两种方式来检测计算/处理任务的完成。

当Oozie启动了一个任务后,Oozie会向该任务提供一个callback URL,一旦运行完成,任务应该触发该URL。

如果任务由于某些原因不能触发这个URL(例如网络故障),或者这个任务本身就无法在完成后触发这个URL,那么Oozie可以查询(poll)这个任务是否已经完成了。

如果任务成功完成,那么workflow会转移至ok;如果没能成功完成,则workflow会转移至error

如果任务退出时带有错误,则它必须将error-code或者error-message提供给Oozie,这可以帮助decision节点实现错误处理。

1.3.3 Action Recovery

一旦Oozie成功启动了一个action,那么即使该action运行失败了,Oozie也不会试图重新启动该action。

如果出现临时性的故障(例如网络故障,或者是远程系统暂时不可用),那么Oozie在一段时间后会重试。

1.4 监控

提交Workflow job后,可以通过它的的job-id来查看运行情况,命令为:

oozie job -oozie http://[host]:11000/oozie -info [job-id]




2. Fs(HDFS) Action


Fs action支持的命令为:

  1. <workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.5">
  2. ...
  3. <action name="[NODE-NAME]">
  4. <fs>
  5. <delete path='[PATH]'/>
  6. <mkdir path='[PATH]'/>
  7. <move source='[FROM-PATH]' target='[TO-PATH]'/>
  8. <chmod path='[PATH]' permissions='[PERMISSIONS]' dir-files='false'/>
  9. <touchz path='[PATH]'/>
  10. <chgrp path='[PATH]' group='[GROUP]' dir-files='false'/>
  11. ...
  12. </fs>
  13. <ok to='NODE-NAME'/>
  14. <error to='NODE-NAME'/>
  15. </action>
  16. ...
  17. </workflow-app>




3. Spark Action


Workflow job要等到Spark job运行完毕之后,才会开始下一个action。

  1. <workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.5">
  2. ...
  3. <action name="[NODE-NAME]">
  4. <spark xmlns="uri:oozie:spark-action:0.1">
  5. <job-tracker>[JOB-TRACKER]</job-tracker>
  6. <name-node>[NAME-NODE]</name-node>
  7. <prepare>
  8. <delete path="[PATH]"/>
  9. ...
  10. <mkdir path="[PATH]"/>
  11. ...
  12. </prepare>
  13. <job-xml>[SPARK SETTINGS FILE]</job-xml>
  14. <configuration>
  15. <property>
  16. <name>[PROPERTY-NAME]</name>
  17. <value>[PROPERTY-VALUE]</value>
  18. </property>
  19. ...
  20. </configuration>
  21. <master>[SPARK MASTER URL]</master>
  22. <mode>[SPARK MODE]</mode>
  23. <name>[SPARK JOB NAME]</name>
  24. <class>[SPARK MAIN CLASS]</class>
  25. <jar>[SPARK DEPENDENCIES JAR / PYTHON FILE]</jar>
  26. <spark-opts>[SPARK-OPTIONS]</spark-opts>
  27. <arg>[ARG-VALUE]</arg>
  28. ...
  29. <arg>[ARG-VALUE]</arg>
  30. ...
  31. </spark>
  32. <ok to="[NODE-NAME]"/>
  33. <error to="[NODE-NAME]"/>
  34. </action>
  35. ...
  36. </workflow-app>

3.1 Log

提交一个Spark action时,Oozie会首先启动一个launcher map-reduce job,然后这个launcher job会提交真正的Spark job。Spark action的日志会被重定向到这个launcher map-reduce job的stdout/stderr。

3.2 Spark on YARN

要想将Spark action运行在YARN上,需要:

  1. Make the Spark-assembly jar available to the Spark action
  2. master指定为yarn-client或者yarn-cluster

为了确保Spark-assembly jar对action可见,需要在job.properties文件进行如下设置:

oozie.use.system.libpath=true
oozie.libpath=${NameNode}/user/oozie/share/lib

并将spark-assembly.jar放入到${oozie.libpath}中去


为了确保Spark job显示在Spark History Server中,必须指定以下三个参数:

  1. spark.yarn.historyServer.address=http://[host]:[18088]
  2. spark.eventLog.dir=hdfs://[NN]:8020/user/spark/applicationHistory
  3. spark.eventLog.enabled=true



以上三个参数可以通过以下任意一种方式来设置:

  1. 在workflow.xml文件的spark-opt中通过--conf指定
  2. 通过oozie.service.SparkConfigurationService.spark.configurations指定
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注