1. Azkaban是什么?
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系,这个依赖关系必须是无环的,否则会被视为无效的工作流。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
1.1、Azkaban优点:
- 提供功能清晰,简单易用的Web UI界面
- 提供job配置文件快速建立任务和任务之间的依赖关系
- 提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop
- 基于Java开发,代码结构清晰,易于二次开发
1.2、Azkaban的适用场景
- 大量任务调度工作
- 每天有一个大任务,这个大任务可以分成A,B,C,D四个小任务
- linux计划任务无法实现的复杂工作任务调度工作
2. Azkaban使用入门......
2.1web页面介绍
登录页面:用户名和密码就不用说了
第二步:登陆后页面介绍
①:是创建的的项目列表 ②:任务调度执行计划
③:正在执行的计划任务 ④:历史的执行J计划任务
⑤:官方说明文档 ⑥:创建Project项目
⑦:创建完成的Project项目
第三步:简单入门,非依赖任务
第一步 :书写Job命令
创建 audience_avg_duration.job 文本文件,内容如下
type=command
command=/mnt/disk1/azkaban_etl_work/TTFM_Rbc_Audience_Avg_Duration/start_avg_time_length_analysis.sh
解释说明:type 为当前执行的类型
type=command type=command 说明为 类型为 命令类型/支持SQL,Pig、Hadoop等
command=XXXXXX command 说明为需要执行的命令为XXXXXX
将 audience_avg_duration.job 打包为 XXX.zip文件,文件名字随意,后缀必须为Zip
zip -d myfile.zip audience_avg_duration.job 将audience_avg_duration.job 文件压缩为myfile.zip 文件
将当前压缩好的 myfile.zip 上传到本地桌面
然后开始创建Azkaban 的Project项目,每一个项目
第三步:上传XXX.zIp文件
①:上传压缩后的XXX.zip文件夹
②:点击选择文件,点击桌面的文件
③:点击上传
④:上传zip文件,解析的zip 后显示的Job名字
下一步,点击,Execute Flow
下一步:点击执行①之后,显示
②:设置执行计划
生成完毕之后,点击右下角的Schedule按钮,应用结果!
按钮 ①:为执行按钮,点击立即执行
按钮②:为设置Cron计划时间按钮
上图表格为绿色的时候即为运行成功,红色为运行失败!
至此简单的Azkaban 运行成功, command = echo "this is 成功" 日志会打印这句话,表示运行成功过
第四步:进阶Azkaban的依赖工作流的使用方法
有官方文档可查阅可知 Azkaban 工作流,有依赖的模式是无法使用Job结尾的来运行,必须使用Flow 为结尾的文件
Demo如下
将文件一起压缩,上传到Project中,查看解析流程
打开文件①
打开文件②
nodes:
- name: jobM
type: command
dependsOn:
- jobE
- jobF
- jobG
- jobI
- jobJ
- jobK
config:
command: /mnt/disk1/azkaban_etl_work/TingTing_FM_Label/start_tingting_label.sh
- name: jobD
type: command
dependsOn:
- jobC
config:
command: /mnt/disk1/azkaban_etl_work/TingTing_FM_Data_Etl/start_tingtingfm.sh
- name: jobC
type: noop
# 数据拉取合并
dependsOn:
- jobA
- jobB
- name: jobA
#数据拉取1
type: command
config:
command: sudo -u hdfs /mnt/azkaban_work/date_ttfm01/date_ttfm.sh
- name: jobB
#数据拉取2
type: command
config:
command: sudo -u hdfs /mnt/azkaban_work/date_ttfm02/date_ttfm.sh
- name: jobE
#有过收藏行为
type: command
dependsOn:
- jobD
config:
command: /mnt/disk1/azkaban_etl_work/TTFM_User_Heat/start_ttfm_user_heat.sh
- name: jobF
#有过评论行为
type: command
dependsOn:
- jobD
config:
command: /mnt/disk1/azkaban_etl_work/TTFM_Distinct_User_Feedback_Comment/start_ttfm_distinct_user_feedback_comment.sh
- name: jobG
#有过使用/试听行为
type: command
dependsOn:
- jobD
config:
command: /mnt/disk1/azkaban_etl_work/TTFM_Behaviors_Radio_Play/start_ttfm_behaviors_radio_play.sh
- name: jobH
#Sqoop数据同步
type: command
dependsOn:
- jobC
config:
command: /mnt/disk1/azkaban_etl_work/TTFM_Sqoop_rbc_ttfm_client_behaviors_radio_play/start_ttfm_sqoop_rbc_ttfm_behaviors_radio_play.sh
- name: jobI
#使用频次偏好
type: command
dependsOn:
- jobH
config:
command: /mnt/disk1/azkaban_etl_work/TTFM_Use_Frequency_Preference/start_ttfm_use_frequency_preference.sh
- name: jobJ
#收听时间段
type: command
dependsOn:
- jobH
config:
command: /mnt/disk1/azkaban_etl_work/TTFM_Llistening_Time/start_ttfm_listening_time.sh
- name: jobK
#收听偏好
type: command
dependsOn:
- jobH
config:
command: /mnt/disk1/azkaban_etl_work/TTFM_Listening_Preference/start_ttfm_listening_preference.sh
由上面流程图和配置文件可知
JobM
dependsOn
JobE,JobF,JobG,JobI,JobJ,JobK
______________________________________________________
JobE JobF JobG
dependsOn
JobD JobD JobD
______________________________________________________
JobI JobJ JobK
dependsOn
JobH JobH JobH
——————————————————————————————
JobD JobH
dependsOn
JobC
______________________________________________________
JobC
dependsOn
JobA JobB