为什么需要工作流调度系统?
Azkaban是为了很好的组织起复杂执行计划,起到了工作调度系统的作用,通过调度保证程序有序执行
1)简单的任务调度:直接使用Linux的Crontab来定义;
Azkaban配置
azkaban 2.0, 对应的是azkaban project 1.0 azkaban支持 properties配置文件,也支持yml配置文件!
azkaban3.0 , 对应的是azkaban project 2.0 azkaban默认支持yml配置文件!
1.上传tar包
2.配置MySQL
2.1启动MySQL
mysql -u root -p
2.2创建Azkaban数据库
Azkaban Executor Server处理工作流和作业的实际执行。
3.配置Executor Server
#设置时区 default.timezone.id=Asia/Shanghai #... azkaban.webserver.url=http://hadoop102:8081 #... database.type=mysql mysql.port=3306 mysql.host=主机名 mysql.database=mysql数据库名 mysql.user=使用者user mysql.password=mysql密码 mysql.numconnections=100 executor.port=12321
3.1同步azkaban-exec到所有节点
xsync /opt/module/azkaban/azkaban-exec
注意事项:
启动azkaban时,必须来到 azkaban的家目录,执行启动命令!
为什么?
user.manager.xml.file=conf/azkaban-users.xml 相对的是,当前你所在的目录,也就是执行start-exec.sh命令时,所在的目录 举例: 在 /home/user 启动azkaban 此时: user.manager.xml.file=/home/user/conf/azkaban-users.xml 报错,找不到此文件 如果在 azkaban的家目录启动: user.manager.xml.file=/opt/module/azkaban/azkaban-exec/conf/azkaban-users.xml
4.激活executor
curl -G "hadoop102:12321/executor?action=activate" && echo
发送成功!
{"status":"success"}
5.配置Web Server
Azkaban Web Server处理项目管理,身份验证,计划和执行触发。
5.1编辑conf目录下的azkaban.properties
说明:...
default.timezone.id=Asia/Shanghai
#配置同上:database.type=mysql
mysql.port=3306
mysql.host=
mysql.database=
mysql.user=
mysql.password=
mysql.numconnections=100
...
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
#StaticRemainingFlowSize:正在排队的任务数;
#CpuStatus:CPU占用情况
#MinimumFreeMemory:内存占用情况。测试环境,必须将MinimumFreeMemory删除掉,否则它会认为集群资源不够,不执行。
5.2 修改azkaban-users.xml文件,添加用户
<azkaban-users> <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/> <user password="metrics" roles="metrics" username="metrics"/> <user password="mysqlpassword" roles="metrics,admin" username="mysql_user"/> <role name="admin" permissions="ADMIN"/> <role name="metrics" permissions="METRICS"/> </azkaban-users>
5.3启动azkaban-web
访问http://hadoop102:8081,并用添加用户登陆
Azkaban使用
HelloWorld案例
azkaban-flow-version: 2.0
注意:该文件作用,是采用新的Flow-API方式解析flow文件。
2.新建basic.flow文件,内容如下nodes: - name: jobA type: command config: command: echo "Hello World"
(1)Name:job名称
(2)Type:job类型。command表示你要执行作业的方式为命令
(3)Config:job配置
3.将azkaban.project、basic.flow文件压缩到一个zip文件,文件名称必须是英文
作业依赖案例
1.修改basic.flow为如下内容
nodes: - name: jobC type: command # jobC 依赖 JobA和JobB dependsOn: - jobA - jobB config: command: echo "I’m JobC" - name: jobA type: command config: command: echo "I’m JobA" - name: jobB type: command config: command: echo "I’m JobB"
自动失败重试案例
1)编译配置流
nodes: - name: JobA type: command config: command: sh /not_exists.sh retries: 3 retry.backoff: 10000
参数说明:
retries:重试次数
retry.backoff:重试的时间间隔
执行并观察到一次失败+三次重试
也可以点击上图中的Log,在任务日志中看到,总共执行了4次手动失败重试案例
需求:JobA=》JobB(依赖于A)=》JobC=》JobD=》JobE=》JobF。生产环境,任何Job都有可能挂掉,可以根据需求执行想要执行的Job。
1.编译配置流
nodes: - name: JobA type: command config: command: echo "This is JobA." - name: JobB type: command dependsOn: - JobA config: command: echo "This is JobB." - name: JobC type: command dependsOn: - JobB config: command: echo "This is JobC." - name: JobD type: command dependsOn: - JobC config: command: echo "This is JobD." - name: JobE type: command dependsOn: - JobD config: command: echo "This is JobE." - name: JobF type: command dependsOn: - JobE config: command: echo "This is JobF."
Enable和Disable下面都分别有如下参数:
Parents:该作业的上一个任务
Ancestors:该作业前的所有任务
Children:该作业后的一个任务
Descendents:该作业后的所有任务
可以根据需求选择性执行对应的任务。
定时执行案例
具体步骤:
2)右上角注意时区是上海,然后在左面填写具体执行事件,填写的方法和crontab配置定时任务规则一致。
邮件报警案例
#这里设置邮件发送服务器,需要 申请邮箱,切开通stmp服务,以下只是例子 mail.sender=yinbiaohuau@126.com mail.host=smtp.126.com mail.user=yinbiaohua@126.com mail.password=用邮箱的授权码2.2保存并重启web-server
nodes: - name: jobA type: command config: command: echo "This is an email test."2.4压缩打包上传
第4章 参考资料
4.1 Azkaban完整配置
见官网文档:https://azkaban.readthedocs.io/en/latest/configuration.html
4.2 YAML语法
Azkaban2.0工作流文件是用YAML语法写的,相关教程如下: