数据文件生成
时间条件
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,其中pig脚本所在的HDFS路径,param为pig脚本中的参数。Oozie调度pig任务略坑,先随机指定一台机器,然后将pig脚本dist到该机器,然后执行。但是,因为集群中不同机器部署的pig版本可能不一致,而导致任务跑失败。
${jobTracker} ${nameNode} mapreduce.job.queuename ${queueName}CLEANDATE=${cleanDate}
在pig脚本中,一般用$ + 大写字母表示输入参数,示例如下:
A = load '///$CLEANDATE' using OrcStorage(); store E into '//$CLEANDATE';
实际上,在本地执行带参数的pig脚本时,也是用-param命令:
pig -f test.pig -param CLEANDATE=2016-05-26
Hive
Oozie也可以调度Hive任务,一般使用hive2 action通过beeline连接Hive Server 2,然后执行HiveQL:
${jobTracker} ${nameNode} mapreduce.job.queuename ${queueName} jdbc:hive2://host:10000/db-nameDAYTIME=${dayTime} 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