因为之前自己工作中有用过Azkaban作为自动化任务调度工具,所以想参考自己之前的使用经验,总结一下关于Azkaban的使用,方便大家使用Azkaban快速实现企业级自动化任务
如何选择市面上的任务调度工具
总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂,
如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象
什么是Azkaban
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,
它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系。
Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
Azkaban的特点
AzkabanWebServer
是整个Azkaban工作流系统的主要管理者,它用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务
负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行
存储大部分执行流状态, AzkabanWebServer
和 AzkabanExecutorServer
都需要访问数据库
部署模式
为确保所选的 Executor 能够准确的执行任务,我们须在以下两种方案任选其一,推荐使用方案二
安装依赖包及其作用
该包中就是所有的建表语句,主要是配置 MySQL
azkaban-db-3.84.4.tar.gz
执行服务器(Executor)配置
azkaban-exec-server-3.84.4.tar.gz
服务器(Web)配置
azkaban-web-server-3.84.4.tar.gz
访问端口号
默认是 8443,可以通过修改配置文件 azkaban.properties
的方式更改端口号
端口号使用规则: jetty.ssl.port > jetty.port
但是使用 jetty.ssl.port
的前提是 jetty.use.ssl = true
,这个配置表示开启ssl安全套接层,否则使用jetty.port端口
示例配置文件
jetty.use.ssl=false
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password
基本使用
type=command
command=echo 'hello-world'
type=command
command=sh hello-world.sh
type=command
command=/usr/install/spark/bin/spark-submit --class com.test.AzkabanTest test-0.1.0.jar
type=command
command=beeline -u jdbc:hive://localhost:7777 -n hive -p hive -f 'test.sql'
type=command
command=${HADOOP_HOME}bin/hadoop jar hadoop-mapreduce-examples--0.1.0.jar
mapreduce-test ${input} ${output}
使用 dependsOn
属性来表示依赖,他的值是一个数组
示例 basic.flow
JobA 和 JobB 执行完了,才能执行 JobC
nodes:
- name: jobA
type: command
config:
command: echo "I’m JobA"
- name: jobB
type: command
config:
command: echo "I’m JobB"
- name: jobC
type: command
# jobC 依赖 JobA 和 JobB
dependsOn:
- jobA
- jobB
config:
command: echo "I’m JobC"
使用 retries
和 retry.backoff
来配置重试次数,重试的时间间隔
示例 basic.flow,在任务中配置
nodes:
- name: JobA
type: command
config:
# 执行脚本
command: sh xxx.sh
# 重试次数 3次
retries: 3
# 重试间隔时间 10000ms 也就是10s
retry.backoff: 10000
示例 basic.flow,在flow的全局配置
config:
retries: 3
retry.backoff: 10000
nodes:
- name: jobA
type: command
config:
command: sh xxxq.sh
- name: jobB
type: command
config:
command: sh xxxb.sh
- name: jobC
type: command
dependsOn:
- jobA
- jobB
config:
command: sh xxxc.sh
在 Flow View
界面右键点击需要重拾的 Job
,选择需要的重新执行的某个过程, Enable
和 Disable
下面都分别有如下参数:
JavaProcess 类型可以运行一个自定义主类方法,type 类型为 javaprocess,可用的配置为:
示例 basic.flow
nodes:
- name: test_java
type: javaprocess
config:
Xms: 96M
Xmx: 200M
java.class: com.fx67ll.springboot.AzkabanTest
Azkaban 中预置了几个特殊的判断条件,称为预定义宏,预定义宏会根据所有父 Job 的完成情况进行判断,再决定是否执行,可用的预定义宏如下:
all_success: 表示父 Job 全部成功才执行(默认)
all_done:表示父 Job 全部完成才执行
all_failed:表示父 Job 全部失败才执行
one_success:表示父 Job 至少一个成功才执行
one_failed:表示父 Job 至少一个失败才执行
示例 JobA.sh
echo “do JobA”
示例 JobB.sh
echo “do JobB”
示例 JobC.sh
echo “do JobC”
示例 basic.flow
nodes:
– name: jobA
type: command
config:
command: sh JobA.sh
– name: jobB
type: command
config:
command: sh JobA.sh
dependsOn:
– jobA
– jobB
config:
command: sh JobC.sh
condition: one_success
提交的时候故意不提交 JobB.sh,以测试预定义宏是否生效
在执行工作流时候,选择左下角 Schedule
按钮,在 Schedule Flow Options
配置即可
YAML
YAML(YAML 不是标记语言)是一种非常灵活的格式,几乎是 JSON 的超集,已经被用在一些著名的项目中,如 Travis CI、Circle CI 和 AWS CloudFormation。
YAML 的库几乎和 JSON 一样无处不在。除了支持注释、换行符分隔、多行字符串、裸字符串和更灵活的类型系统之外,YAML 也支持引用文件,以避免重复代码。
大小写敏感
通过缩进表示层级关系
禁止使用 tab 缩进,只能使用空格键
缩进的空格数目不重要,只要相同层级左对齐即可
使用 # 表示注释
我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~ 😃
转发请注明参考文章地址,非常感谢!!!
Original: https://www.cnblogs.com/fx67ll/p/azkaban-quickstart.html
Author: fx67ll
Title: Azkaban快速入门
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598966/
转载文章受原作者版权保护。转载请注明原作者出处!