Oozie使用教程

一.   Oozie简介

Apache Oozie是用于Hadoop平台的一种工作流调度引擎。

  1. 作用

- 统一调度hadoop系统中常见的mr任务启动hdfs操作、shell调度、hive操作等。

- 使得复杂的依赖关系时间触发事件触发使用xml语言进行表达开发效率提高。

- 一组任务使用一个DAG来表示,使用图形表达流程逻辑更加清晰。

- 支持很多种任务调度,能完成大部分hadoop任务处理。

- 程序定义支持EL常量和函数,表达更加丰富。

  1. 架构

  1. 访问

- 通过浏览器访问 http://master:11000/oozie/

- 通过HUE访问

  1. 概念

- workflow:工作流

- coordinator:多个workflow可以组成一个coordinator,可以把前几个workflow的输出作为后- 一个workflow的输入,也可以定义workflow的触发条件,来做定时触发

- bundle:是对一堆coordinator的抽象

二.   Oozie操作

  1. Oozie shell

- 编写job.properties文件

- 编写workflow.xml文件

<workflow-app xmlns="uri:oozie:workflow:0.4" name="shell-wf">

<start to="shell-node"/>

<action name="shell-node">

<shell xmlns="uri:oozie:shell-action:0.2">

<job-tracker>${jobTracker}</job-tracker>

<name-node>${nameNode}</name-node>

<configuration>

<property>

<name>mapred.job.queue.name</name>

<value>${queueName}</value>

</property>

</configuration>

<exec>echo</exec>

<argument>my_output=Hello Oozie</argument>

<capture-output/>

</shell>

<ok to="check-output"/>

<error to="fail"/>

</action>

<decision name="check-output">

<switch>

<case to="end">

${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}

</case>

<default to="fail-output"/>

</switch>

</decision>

<kill name="fail">

<message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>

</kill>

<kill name="fail-output">

<message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>

</kill>

<end name="end"/>

</workflow-app>

- 执行oozie cli命令

执行命令后会返回一个job的id,在web的监控页面或Hue的页面可以查看其信息。

Job的有向无环图:

  1. Oozie fs

- 编写job.properties文件

- 编写workflow.xml文件

  1. <workflow-app xmlns="uri:oozie:workflow:0.2" name="fs">
  1.     <start to="fs-node"/>
  1.     <action name="fs-node">
  1.       <fs>
  1.        <delete path='/home/kongc/oozie'/>
  1.          <mkdir path='/home/kongc/oozie1'/>
  1.          <move source='/home/kongc/spark-application' target='/home/kongc/oozie1'/>
  1.       </fs>
  1.       <ok to="end"/>
  1.       <error to="fail"/>
  1.     </action>
  1.     <kill name="fail">
  1.         <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  1.     </kill>
  1.     <end name="end"/>
  1. </workflow-app>

- 执行oozie cli命令

  1. Oozie Sqoop

- 编写job.properties文件

- 编写配置文件

  1. #HSQL Database Engine 1.8.0.5
  1. #Tue Oct 05 11:20:19 SGT 2010
  1. hsqldb.script_format=0
  1. runtime.gc_interval=0
  1. sql.enforce_strict_size=false
  1. hsqldb.cache_size_scale=8
  1. readonly=false
  1. hsqldb.nio_data_file=true
  1. hsqldb.cache_scale=14
  1. version=1.8.0
  1. hsqldb.default_table_type=memory
  1. hsqldb.cache_file_scale=1
  1. hsqldb.log_size=200
  1. modified=no
  1. hsqldb.cache_version=1.7.0
  1. hsqldb.original_version=1.8.0
  1. hsqldb.compatible_version=1.8.0

- 编写sql文件

  1. CREATE SCHEMA PUBLIC AUTHORIZATION DBA
  1. CREATE MEMORY TABLE TT(I INTEGER NOT NULL PRIMARY KEY,S VARCHAR(256))
  1. CREATE USER SA PASSWORD ""
  1. GRANT DBA TO SA
  1. SET WRITE_DELAY 10
  1. SET SCHEMA PUBLIC
  1. INSERT INTO TT VALUES(1,'a')
  1. INSERT INTO TT VALUES(2,'a')
  1. INSERT INTO TT VALUES(3,'a')

- 编写workflow.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  1. <workflow-app xmlns="uri:oozie:workflow:0.2" name="sqoop-wf">
  1.     <start to="sqoop-node"/>
  1.  
  1.     <action name="sqoop-node">
  1.         <sqoop xmlns="uri:oozie:sqoop-action:0.2">
  1.             <job-tracker>${jobTracker}</job-tracker>
  1.             <name-node>${nameNode}</name-node>
  1.             <prepare>
  1.                 <delete path="${nameNode}/user/oozie/${examplesRoot}/output-data/sqoop"/>
  1.                 <mkdir path="${nameNode}/user/oozie/${examplesRoot}/output-data"/>
  1.             </prepare>
  1.             <configuration>
  1.                 <property>
  1.                     <name>mapred.job.queue.name</name>
  1.                     <value>${queueName}</value>
  1.                 </property>
  1.             </configuration>
  1.             <command>import --connect jdbc:hsqldb:file:db.hsqldb --table TT --target-dir /user/oozie/${examplesRoot}/output-data/sqoop -m 1</command>
  1.             <file>db.hsqldb.properties#db.hsqldb.properties</file>
  1.             <file>db.hsqldb.script#db.hsqldb.script</file>
  1.         </sqoop>
  1.         <ok to="end"/>
  1.         <error to="fail"/>
  1.     </action>
  1.  
  1.     <kill name="fail">
  1.         <message>Sqoop failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  1.     </kill>
  1.     <end name="end"/>
  1. </workflow-app>

- 执行oozie cli命令

  1. Oozie Java

- 编写job.properties文件

- 编写workflow.xml文件

  1. <workflow-app xmlns="uri:oozie:workflow:0.2" name="java-main-kc">
  1.     <start to="java-node"/>
  1.     <action name="java-node">
  1.         <java>
  1.             <job-tracker>${jobTracker}</job-tracker>
  1.             <name-node>${nameNode}</name-node>
  1.             <configuration>
  1.                 <property>
  1.                     <name>mapred.job.queue.name</name>
  1.                     <value>${queueName}</value>
  1.                 </property>
  1.             </configuration>
  1.             <main-class>org.apache.oozie.example.DemoJavaMain</main-class>
  1.             <arg>Hello</arg>
  1.             <arg>Oozie!</arg>
  1.         </java>
  1.         <ok to="end"/>
  1.         <error to="fail"/>
  1.     </action>
  1.     <kill name="fail">
  1.         <message>Java failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  1.     </kill>
  1.     <end name="end"/>
  1. </workflow-app>

- 执行oozie cli命令

  1. Oozie Hive

- 编写job.properties文件

- 编写workflow.xml文件

  1. <workflow-app xmlns="uri:oozie:workflow:0.5" name="hive2-wf">
  1.     <start to="hive2-node"/>
  1.  
  1.     <action name="hive2-node">
  1.         <hive2 xmlns="uri:oozie:hive2-action:0.1">
  1.             <job-tracker>${jobTracker}</job-tracker>
  1.             <name-node>${nameNode}</name-node>
  1.             <prepare>
  1.                 <delete path="${nameNode}/user/oozie/${examplesRoot}/output-data/hive2"/>
  1.                 <mkdir path="${nameNode}/user/oozie/${examplesRoot}/output-data"/>
  1.             </prepare>
  1.             <configuration>
  1.                 <property>
  1.                     <name>mapred.job.queue.name</name>
  1.                     <value>${queueName}</value>
  1.                 </property>
  1.             </configuration>
  1.             <jdbc-url>${jdbcURL}</jdbc-url>
  1.             <script>script.q</script>
  1.             <param>INPUT=/user/oozie/${examplesRoot}/input-data/table</param>
  1.             <param>OUTPUT=/user/oozie/${examplesRoot}/output-data/hive2</param>
  1.         </hive2>
  1.         <ok to="end"/>
  1.         <error to="fail"/>
  1.     </action>
  1.  
  1.     <kill name="fail">
  1.         <message>Hive2 (Beeline) action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  1.     </kill>
  1.     <end name="end"/>
  1. </workflow-app>

- 编写hive脚本

  1. INSERT OVERWRITE DIRECTORY '${OUTPUT}' SELECT * FROM test_machine;

- 执行oozie cli命令

  1. Oozie Impala

- 编写job.properties文件

- 编写workflow.xml文件

  1. <workflow-app name="shell-impala" xmlns="uri:oozie:workflow:0.4">
  1.       <start to="shell-impala-invalidate"/>
  1.       <action name="shell-impala-invalidate">
  1.                <shell xmlns="uri:oozie:shell-action:0.1">
  1.                          <job-tracker>${jobTracker}</job-tracker>
  1.                          <name-node>${nameNode}</name-node>
  1.                          <configuration>
  1.                                   <property>
  1.                                             <name>mapred.job.queue.name</name>
  1.                                             <value>${queueName}</value>
  1.                                   </property>
  1.                          </configuration>
  1.                          <exec>${EXEC}</exec>
  1.                          <file>${EXEC}#${EXEC}</file>
  1.                </shell>
  1.                <ok to="end"/>
  1.                <error to="kill"/>
  1.       </action>
  1.       <kill name="kill">
  1.                <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  1.       </kill>
  1.       <end name="end"/>
  1. </workflow-app>

- 编写impala脚本文件

  1. #!/bin/bash
  1. impala-shell -i slave2:21000 -q "
  1. select count(*) from test_machine"
  1. echo 'Hello Shell'

- 执行oozie cli命令

  1. Oozie MapReduce

- 编写job.properties文件

- 编写workflow.xml文件

  1. <workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wyl">
  1.     <start to="mr-node"/>
  1.     <action name="mr-node">
  1.         <map-reduce>
  1.             <job-tracker>${jobTracker}</job-tracker>
  1.             <name-node>${nameNode}</name-node>
  1.             <prepare>
  1.                 <delete path="${nameNode}/user/oozie/${examplesRoot}/output-data/${outputDir}"/>
  1.             </prepare>
  1.             <configuration>
  1.                 <property>
  1.                     <name>mapred.job.queue.name</name>
  1.                     <value>${queueName}</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.mapper.class</name>
  1.                     <value>org.apache.oozie.example.SampleMapper</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.reducer.class</name>
  1.                     <value>org.apache.oozie.example.SampleReducer</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.map.tasks</name>
  1.                     <value>1</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.input.dir</name>
  1.                     <value>/user/oozie/${examplesRoot}/input-data/text</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.output.dir</name>
  1.                     <value>/user/oozie/${examplesRoot}/output-data/${outputDir}</value>
  1.                 </property>
  1.             </configuration>
  1.         </map-reduce>
  1.         <ok to="end"/>
  1.         <error to="fail"/>
  1.     </action>
  1.     <kill name="fail">
  1.         <message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  1.     </kill>
  1.     <end name="end"/>
  1. </workflow-app>

- 执行oozie cli命令

  1. Oozie Spark

- 编写job.properties文件

- 编写workflow.xml文件

  1. <workflow-app xmlns='uri:oozie:workflow:0.5' name='SparkFileCopy'>
  1.     <start to='spark-node' />
  1.  
  1.     <action name='spark-node'>
  1.         <spark xmlns="uri:oozie:spark-action:0.1">
  1.             <job-tracker>${jobTracker}</job-tracker>
  1.             <name-node>${nameNode}</name-node>
  1.             <prepare>
  1.                 <delete path="${nameNode}/user/oozie/${examplesRoot}/output-data/spark"/>
  1.             </prepare>
  1.             <master>${master}</master>
  1.             <name>Spark-FileCopy</name>
  1.             <class>org.apache.oozie.example.SparkFileCopy</class>
  1.             <jar>${nameNode}/user/oozie/${examplesRoot}/apps/spark/lib/oozie-examples.jar</jar>
  1.             <arg>${nameNode}/user/oozie/${examplesRoot}/input-data/text/data.txt</arg>
  1.             <arg>${nameNode}/user/oozie/${examplesRoot}/output-data/spark</arg>
  1.         </spark>
  1.         <ok to="end" />
  1.         <error to="fail" />
  1.     </action>
  1.  
  1.     <kill name="fail">
  1.         <message>Workflow failed, error
  1.             message[${wf:errorMessage(wf:lastErrorNode())}]
  1.         </message>
  1.     </kill>
  1.     <end name='end' />
  1. </workflow-app>

- 执行oozie cli命令

  1. Oozie 定时任务

-    定义job.properties

  1.  nameNode=hdfs://localhost:8020
  1. jobTracker=localhost:8021
  1. queueName=default
  1. examplesRoot=examples
  1.  
  1. oozie.coord.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/aggregator/coordinator.xml
  1. start=2010-01-01T01:00Z
  1. end=2010-01-01T03:00Z

-    定义coordinator.xml

  1.  <coordinator-app name="aggregator-coord" frequency="${coord:hours(1)}" start="${start}" end="${end}" timezone="UTC"
  1.                  xmlns="uri:oozie:coordinator:0.2">
  1.     <controls>
  1.         <concurrency>1</concurrency>
  1.     </controls>
  1.  
  1.     <datasets>
  1.         <dataset name="raw-logs" frequency="${coord:minutes(20)}" initial-instance="2010-01-01T00:00Z" timezone="UTC">
  1.             <uri-template>${nameNode}/user/${coord:user()}/${examplesRoot}/input-data/rawLogs/${YEAR}/${MONTH}/${DAY}/${HOUR}/${MINUTE}</uri-template>
  1.         </dataset>
  1.         <dataset name="aggregated-logs" frequency="${coord:hours(1)}" initial-instance="2010-01-01T01:00Z" timezone="UTC">
  1.             <uri-template>${nameNode}/user/${coord:user()}/${examplesRoot}/output-data/aggregator/aggregatedLogs/${YEAR}/${MONTH}/${DAY}/${HOUR}</uri-template>
  1.         </dataset>
  1.     </datasets>
  1.  
  1.     <input-events>
  1.         <data-in name="input" dataset="raw-logs">
  1.             <start-instance>${coord:current(-2)}</start-instance>
  1.             <end-instance>${coord:current(0)}</end-instance>
  1.         </data-in>
  1.     </input-events>
  1.  
  1.     <output-events>
  1.         <data-out name="output" dataset="aggregated-logs">
  1.             <instance>${coord:current(0)}</instance>
  1.         </data-out>
  1.     </output-events>
  1.  
  1.     <action>
  1.         <workflow>
  1.             <app-path>${nameNode}/user/${coord:user()}/${examplesRoot}/apps/aggregator</app-path>
  1.             <configuration>
  1.                 <property>
  1.                     <name>jobTracker</name>
  1.                     <value>${jobTracker}</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>nameNode</name>
  1.                     <value>${nameNode}</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>queueName</name>
  1.                     <value>${queueName}</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>inputData</name>
  1.                     <value>${coord:dataIn('input')}</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>outputData</name>
  1.                     <value>${coord:dataOut('output')}</value>
  1.                 </property>
  1.             </configuration>
  1.         </workflow>
  1.     </action>
  1. </coordinator-app>

三.   Oozie实例

  1. 设计工作流

  1. 编写job.properties文件
  1.  nameNode=hdfs://localhost:8020
  1. jobTracker=localhost:8021
  1. queueName=default
  1. examplesRoot=examples
  1. streamingMapper=/bin/cat
  1. streamingReducer=/usr/bin/wc
  1.  
  1. oozie.use.system.libpath=true
  1.  
  1. oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/demo
  1.  
  1. 在workflow.xml文件定义节点
  1.  <workflow-app xmlns="uri:oozie:workflow:0.2" name="demo-wf">
  1.  
  1.     <start to="cleanup-node"/>
  1.  
  1.     <action name="cleanup-node">
  1.         <fs>
  1.             <delete path="${nameNode}/user/oozie/${examplesRoot}/output-data/demo"/>
  1.         </fs>
  1.         <ok to="fork-node"/>
  1.         <error to="fail"/>
  1.     </action>
  1.  
  1.     <fork name="fork-node">
  1.         <path start="pig-node"/>
  1.         <path start="streaming-node"/>
  1.     </fork>
  1.  
  1.     <action name="pig-node">
  1.         <pig>
  1.             <job-tracker>${jobTracker}</job-tracker>
  1.             <name-node>${nameNode}</name-node>
  1.             <prepare>
  1.                 <delete path="${nameNode}/user/oozie/${examplesRoot}/output-data/demo/pig-node"/>
  1.             </prepare>
  1.             <configuration>
  1.                 <property>
  1.                     <name>mapred.job.queue.name</name>
  1.                     <value>${queueName}</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.map.output.compress</name>
  1.                     <value>false</value>
  1.                 </property>
  1.             </configuration>
  1.             <script>id.pig</script>
  1.             <param>INPUT=/user/oozie/${examplesRoot}/input-data/text</param>
  1.             <param>OUTPUT=/user/oozie/${examplesRoot}/output-data/demo/pig-node</param>
  1.         </pig>
  1.         <ok to="join-node"/>
  1.         <error to="fail"/>
  1.     </action>
  1.  
  1.     <action name="streaming-node">
  1.         <map-reduce>
  1.             <job-tracker>${jobTracker}</job-tracker>
  1.             <name-node>${nameNode}</name-node>
  1.             <prepare>
  1.                 <delete path="${nameNode}/user/oozie/${examplesRoot}/output-data/demo/streaming-node"/>
  1.             </prepare>
  1.             <streaming>
  1.                 <mapper>${streamingMapper}</mapper>
  1.                 <reducer>${streamingReducer}</reducer>
  1.             </streaming>
  1.             <configuration>
  1.                 <property>
  1.                     <name>mapred.job.queue.name</name>
  1.                     <value>${queueName}</value>
  1.                 </property>
  1.  
  1.                 <property>
  1.                     <name>mapred.input.dir</name>
  1.                     <value>/user/oozie/${examplesRoot}/input-data/text</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.output.dir</name>
  1.                     <value>/user/oozie/${examplesRoot}/output-data/demo/streaming-node</value>
  1.                 </property>
  1.             </configuration>
  1.         </map-reduce>
  1.         <ok to="join-node"/>
  1.         <error to="fail"/>
  1.     </action>
  1.  
  1.     <join name="join-node" to="mr-node"/>
  1.    
  1.     
  1.     <action name="mr-node">
  1.         <map-reduce>
  1.             <job-tracker>${jobTracker}</job-tracker>
  1.             <name-node>${nameNode}</name-node>
  1.             <prepare>
  1.                 <delete path="${nameNode}/user/oozie/${examplesRoot}/output-data/demo/mr-node"/>
  1.             </prepare>
  1.             <configuration>
  1.                 <property>
  1.                     <name>mapred.job.queue.name</name>
  1.                     <value>${queueName}</value>
  1.                 </property>
  1.  
  1.                 <property>
  1.                     <name>mapred.mapper.class</name>
  1.                     <value>org.apache.oozie.example.DemoMapper</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.mapoutput
  1. .key.class</name>
  1.                     <value>org.apache.hadoop.io.Text</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.mapoutput.value.class</name>
  1.                     <value>org.apache.hadoop.io.IntWritable</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.reducer.class</name>
  1.                     <value>org.apache.oozie.example.DemoReducer</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.map.tasks</name>
  1.                     <value>1</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.input.dir</name>
  1.                     <value>/user/oozie/${examplesRoot}/output-data/demo/pig-node,/user/oozie/${examplesRoot}/output-data/demo/streaming-node</value>
  1.                 </property>
  1.                 <property>
  1.                     <name>mapred.output.dir</name>
  1.                     <value>/user/oozie/${examplesRoot}/output-data/demo/mr-node</value>
  1.                 </property>
  1.             </configuration>
  1.         </map-reduce>
  1.         <ok to="decision-node"/>
  1.         <error to="fail"/>
  1.     </action>
  1.  
  1.     <decision name="decision-node">
  1.         <switch>
  1.             <case to="hdfs-node">${fs:exists(concat(nameNode, '/user/oozie/examples/output-data/demo/mr-node')) == "true"}</case>
  1.             <default to="end"/>
  1.         </switch>
  1.     </decision>
  1.  
  1.     <action name="hdfs-node">
  1.         <fs>
  1.             <move source="${nameNode}/user/oozie/${examplesRoot}/output-data/demo/mr-node"
  1.                   target="/user/oozie/${examplesRoot}/output-data/demo/final-data"/>
  1.         </fs>
  1.         <ok to="end"/>
  1.         <error to="fail"/>
  1.     </action>
  1.  
  1.     <kill name="fail">
  1.         <message>Demo workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
  1.     </kill>
  1.  
  1.     <end name="end"/>
  1.  
  1. </workflow-app>
  1. 提交命令

Hue页面提交作业

  1. 查看执行状态

四.   总结

  1. EL函数

- 基本的EL函数

String firstNotNull(String value1, String value2)

String concat(String s1, String s2)

String replaceAll(String src, String regex, String replacement)

String appendAll(String src, String append, String delimeter)

String trim(String s)

String urlEncode(String s)

String timestamp()

String toJsonStr(Map) (since Oozie 3.3)

String toPropertiesStr(Map) (since Oozie 3.3)

String toConfigurationStr(Map) (since Oozie 3.3)

- WorkFlow EL

String wf:id() – 返回当前workflow作业ID

String wf:name() – 返回当前workflow作业NAME

String wf:appPath() – 返回当前workflow的路径

String wf:conf(String name) – 获取当前workflow的完整配置信息

String wf:user() – 返回启动当前job的用户

String wf:callback(String stateVar) – 返回结点的回调URL,其中参数为动作指定的退出状态

int wf:run() – 返回workflow的运行编号,正常状态为0

Map wf:actionData(String node) – 返回当前节点完成时输出的信息

int wf:actionExternalStatus(String node) – 返回当前节点的状态

String wf:lastErrorNode() – 返回最后一个ERROR状态推出的节点名称

String wf:errorCode(String node) – 返回指定节点执行job的错误码,没有则返回空

String wf:errorMessage(String message) – 返回执行节点执行job的错误信息,没有则返回空

- HDFS EL

boolean fs:exists(String path)

boolean fs:isDir(String path)

long fs:dirSize(String path) – 目录则返回目录下所有文件字节数;否则返回-1

long fs:fileSize(String path) – 文件则返回文件字节数;否则返回-1

long fs:blockSize(String path) – 文件则返回文件块的字节数;否则返回

  1. 注意事项

- job.properties文件可以不上传到hdfs中,是在执行oozie job ...... -config时,批定的linux本地路径

- workflow.xml文件,一定要上传到job.properties的oozie.wf.application.path对应的hdfs目录下。

- job.properties中的oozie.use.system.libpath=true指定oozie使用系统的共享目录。

- job.properties中的oozie.libpath=${nameNode}/user/${user.name}/apps/mymr,可以用来执行mr时,作业导出的jar包存放位置,否则可能报找不到类的错误。

- oozie调度作业时,本质也是启动一个mapreduce作业来调度,workflow.xml中设置的队列名称为调度作业mr的队列名称。所以如果想让作业运行在指定的队列时,需要在mr或hive中指定好。

工作流调度引擎---Oozie的更多相关文章

  1. Azkaban工作流调度器

    Azkaban工作流调度器 在Hadoop领域常用的工作流调度系统 Oozie,Azkaban,Cascading,Hamake等等. 性能对比: 安装: 创建ssl配置 keytool -keyst ...

  2. hadoop工作流调度系统

    常见工作流调度系统 Oozie, Azkaban, Cascading, Hamake 各种调度工具特性对比 特性 Hamake Oozie Azkaban Cascading 工作流描述语言 XML ...

  3. 工作流引擎Oozie(一):workflow

    1. Oozie简介 Yahoo开发工作流引擎Oozie(驭象者),用于管理Hadoop任务(支持MapReduce.Spark.Pig.Hive),把这些任务以DAG(有向无环图)方式串接起来.Oo ...

  4. Azkaban 工作流调度器

    Azkaban 工作流调度器 1 概述 1.1 为什么需要工作流调度系统 a)一个完整的数据分析系统通常都是由大量任务单元组成,shell脚本程序,java程序,mapreduce程序.hive脚本等 ...

  5. 工作流调度器azkaban(以及各种工作流调度器比对)

    1:工作流调度系统的作用: (1):一个完整的数据分析系统通常都是由大量任务单元组成:比如,shell脚本程序,java程序,mapreduce程序.hive脚本等:(2):各任务单元之间存在时间先后 ...

  6. azkaban工作流调度器及相关工具对比

    本文转载自:工作流调度器azkaban,主要用于架构选型,安装请参考:Azkaban安装与简介,azkaban的简单使用 为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: ...

  7. 工作流调度器azkaban

    为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 各任务单元之间存在时间先后及前后依赖关系 为了很 ...

  8. 工作流调度器azkaban2.5.0的安装和使用

    为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 各任务单元之间存在时间先后及前后依赖关系 为了很 ...

  9. 大数据调度工具oozie详细介绍

    背景 之前项目中的sqoop等离线数据迁移job都是利用shell脚本通过crontab进行定时执行,这样实现的话比较简单,但是随着多个job复杂度的提升,无论是协调工作还是任务监控都变得麻烦,我们选 ...

随机推荐

  1. C语言精要总结-内存地址对齐与struct大小判断篇

    在笔试时,经常会遇到结构体大小的问题,实际就是在考内存地址对齐.在实际开发中,如果一个结构体会在内存中高频地分配创建,那么掌握内存地址对齐规则,通过简单地自定义对齐方式,或者调整结构体成员的顺序,可以 ...

  2. JQuery使用mousedown和mouseup简单判断鼠标按下与释放位置是否相同

    在JQuery中,我们可以利用mousedown.mouseup来跟踪页面的鼠标按下与释放事件. 如何获取鼠标的位置信息呢?事件event的pageX和pageY属性可以让我们获得鼠标在页面中的具体位 ...

  3. .NET Core 2.0体验

    .NET Core 2.0预览版及.NET Standard 2.0 Preview 这个月也就要发布了. 具体相关信息可以查看之前的文章.NET Core 2.0及.NET Standard 2.0 ...

  4. ABP文档 - 对象与对象之间的映射

    文档目录 本节内容: 简介 IObjectMapper 接口 集成 AutoMapper 安装 创建映射 自动映射的特性 自定义映射 扩展方法 MapTo 单元测试 预定义的映射 Localizabl ...

  5. 【源码学习】之requirejs

    对于现在的前端生态来说,requirejs是有点过时了,webpack帮我们包干了一切.但是对于学习源码这件事情来说,永远是不过时的! 最近稍微闲下来了一点,就着以前做过的项目,我也来看看requir ...

  6. POJ1850-Code 递推数学

    题目链接:http://poj.org/problem?id=1850 题目大意: 按照字典序对升序排列组成的字母进行编号,给出一个长度不超过10的串,求出它的编号是多少?如果无法进行编号则输出0. ...

  7. gitlab 添加SSH Key

    1.登录http://domain/users/sign_in 2.选择"Profile Settings",进入"Profile Settings"设置页面 ...

  8. 多工程:基于Maven的SSM(Spring,SpringMvc,Mybatis)整合的web工程(中)

    上篇用了单工程创建了SSM整合的web工程(http://www.cnblogs.com/yuanjava/p/6748956.html),这次我们把上篇的单工程改造成为多模块工程 一:创建对应的多工 ...

  9. kotlin 语言入门指南(三)--编码习惯

    这章主要讲当前 kotlin 的一些编码习惯. 命名 如无疑问,kotlin 的命名风格与以下的java风格一样: --驼峰命名法(不要使用下划线) --类名首字母大写 --方法和属性名首字母小写 - ...

  10. 2D游戏开发(1)

    <外星人入侵> 通过pygame,入门python的2D游戏开发过程,通过教材制作一个打外星人游戏. 1.函数 run_game() import sys import pygame de ...