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>
job.properties:起止时间
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