Hadoop上的工作流调度
Oozie是一个管理Apache Hadoop任务的工作流调度系统。
Oozie工作流任务是有向无环图。
Oozie协调任务是由时间(频率)和数据是否可获得来触发的oozie工作流。
Oozie是一个可扩展的、可靠的和可延伸的系统。
oozie主要由以下几部分组成:
coordinator.xml和job.properties和workflow.xml。
coordinator.xml:定时调度频率
<coordinator-app name="job_name" frequency="${coord:days(1)}" start="${job_start}" end="${job_end}" timezone="GMT+08:00" xmlns="uri:oozie:coordinator:0.2"> <controls> <timeout>2</timeout> <concurrency>1</concurrency> </controls> <action> <workflow> <app-path>${application_path}</app-path> <configuration> <property> <name>sqoop_import_path</name> <value>${coord:dataOut('logData')}</value> </property> <property> <name>nominalformateDate</name> <value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), "yyyyMMdd")}</value> </property> </configuration> </workflow> </action> </coordinator-app>
hdfs_sqoop_tmp=${namenode_address}/ hdfs_address_prefix=/apps #coordinator config job_start=2016-07-15T05:00+0800 job_end=2099-12-31T07:00+0800 #shell dbTest=test.sh application_path=${hdfs_address_prefix}/ oozie.coord.application.path=${application_path}workflow.xml:具体调度的action
<workflow-app xmlns="uri:oozie:workflow:0.2" name="job_name"> <start to="clean/> <action name="clean"> <fs> <delete path="${sqoop_import_path}"/> </fs> <ok to="dbtTest"/> <error to="fail"/> </action> <action name="dbtTest"> </action> <kill name="fail"> <message></message> </kill> <end name="end"/> </workflow-app>
具体的执行语句:
oozie -Dheader:j_username=$j_username -Dheader:j_password=$j_password job -Dnamenode_address=$namenode_address -Djobtracker_address=$jobtracker_address -Dmapred_job_queue_name=$mapred_job_queue_name -Dpg_connection=$pg_connection -Ddbusername=$pg_username -Ddbpassword=$pg_password --oozie $oozie_url -config /appcom/apps/test.properties -auth xxx -run -doas $doas_user