博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工作流引擎Oozie(一):workflow
阅读量:6786 次
发布时间:2019-06-26

本文共 4356 字,大约阅读时间需要 14 分钟。

1. Oozie简介

Yahoo开发工作流引擎(驭象者),用于管理Hadoop任务(支持MapReduce、Spark、Pig、Hive),把这些任务以DAG(有向无环图)方式串接起来。Oozie任务流包括:coordinator、workflow;workflow描述任务执行顺序的DAG,而coordinator则用于定时任务触发,相当于workflow的定时管理器,其触发条件包括两类:

  • 数据文件生成
  • 时间条件

Oozie定义了一种基于XML的hPDL (Hadoop Process Definition Language)来描述workflow的DAG。在workflow中定义了

  • 控制流节点(Control Flow Nodes)
  • 动作节点(Action Nodes)

其中,控制流节点定义了流程的开始和结束(start、end),以及控制流程的执行路径(Execution Path),如decision、fork、join等;而动作节点包括Hadoop任务、SSH、HTTP、eMail和Oozie子流程等。控制流节点示例如下:

...
Failed, error message[${wf:errorMessage(wf:lastErrorNode())}]

其中,fork、join是成对出现,表示了工作流的并发执行,最后汇聚到一个node。从Oozie的工作流调度机制可以看出,Oozie没有能力表达复杂的DAG,比如:嵌套的依赖关系。此外,Oozie工作流可以参数化,比如:在工作流定义中使用像${inputDir}之类的变量,然后通过job.properties配置对应参数,在启动时将这些配置参数传入工作流:

oozie job -oozie http://
:11000/oozie/ -config job.properties -run

2. Workflow

Action Node定义了基本的工作任务节点。(以下介绍版本基于Oozie 4.1.0)

MapReduce

一般地,我用java action启动MapReduce任务,对于任务的动态变化参数,在workflow的configuration进行配置,然后在job.properties指定参数值。

${jobTracker}
${nameNode}
mapred.reduce.tasks
${reducerNum}
mapreduce.job.queuename
${queueName}
...
-Xms256m -Xmx512m
..
${nameNode}/user/${wf:user()}/xx
...
${cleanDate}

其中, ${wf:user()}为workflow的内置参数,表示当前用户名。一般地,使用该参数,为了保证写权限(毕竟没有写文件到其他用户文件夹的权限)。

Spark

Oozie支持Spark action,不过支持的不是特别好。提交spark任务时,需要加载spark-assembly jar。

${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
yarn-cluster
cluster
etl${cleanDate}
...
/
/
/lib/xxx.jar
--num-executors ${executors} --driver-memory 4g --executor-memory 4g --executor-cores 5 --queue=${queueName}
..

Pig

Oozie内置pig action,其中<script>为pig脚本所在的HDFS路径,param为pig脚本中的参数。Oozie调度pig任务略坑,先随机指定一台机器,然后将pig脚本dist到该机器,然后执行。但是,因为集群中不同机器部署的pig版本可能不一致,而导致任务跑失败。

${jobTracker}
${nameNode}
mapreduce.job.queuename
${queueName}
CLEANDATE=${cleanDate}

在pig脚本中,一般用$ + 大写字母表示输入参数,示例如下:

A = load '/
/
/$CLEANDATE' using OrcStorage();...E = ...store E into '/
/$CLEANDATE';

实际上,在本地执行带参数的pig脚本时,也是用-param命令:

pig -f test.pig -param CLEANDATE=2016-05-26

Hive

Oozie也可以调度Hive任务,一般使用通过beeline连接Hive Server 2,然后执行HiveQL:

${jobTracker}
${nameNode}
mapreduce.job.queuename
${queueName}
jdbc:hive2://host:10000/db-name
DAYTIME=${dayTime}

其中,param为HiveQL中的输入参数,其对应hql为

alter table db.log_tb  add if not exists partition (day_time=date '${DAYTIME}') location '${DAYTIME}';

hive命令执行本地hql通过--hivevar传入参数:

hive  -f test.hql --hivevar DAYTIME=2016-05-17

此外,在执行hive2 action时需有如下依赖:

org.apache.hive
hive-exec
${hive.version}
org.apache.hive
hive-beeline
${hive.version}

在job.properties指定oozie.libpath(对应于依赖jar的目录)。

转载于:https://www.cnblogs.com/en-heng/p/5531583.html

你可能感兴趣的文章
sqlserver数据存储
查看>>
进行app性能和安全性测试的重要性
查看>>
Oracle学习总结(9)—— Oracle 常用的基本操作
查看>>
Mysql学习总结(32)——MySQL分页技术详解
查看>>
WebService学习总结(6)——WebService常用接口
查看>>
Mysql学习总结(36)——Mysql查询优化
查看>>
2016阿里云121款产品和解决方案全向图(9月制)
查看>>
git初使用“*** Please tell me who you are. Run
查看>>
面向对象编程基础 (二)
查看>>
MVC的请求过程(或者MVC三者的关系)
查看>>
网页设计易错点总结
查看>>
assign-cookies
查看>>
<正则吃饺子> :关于redis配置文件参数详解
查看>>
2018-2019-2 20165334-Exp6:信息收集与漏洞扫描
查看>>
python发邮件模板参考
查看>>
【转载】rpc.rstatd安装与配置
查看>>
新东方雅思词汇---10.1、(a)esthet
查看>>
html常用属性border-radius、linear-gradient怎么使用
查看>>
jquery-12 折叠面板如何实现(两种方法)
查看>>
bootstrap课程10 从外部引入视频到页面用什么标签
查看>>