目录
一、简介
Azkaban是LinkedIn开源的任务调度框架,采用java编写
Azkaban功能和特点:
- 任务的依赖处理
- 任务监控,失败告警
- 任务流的可视化
- 任务权限管理
Azkaban具有轻量可插拔、友好的WebUI、SLA告警、完善的权限控制、易于二次开发等优点,也得到了广泛应用,主要由三部分组成
- 关系数据库(目前仅支持mysql),用于存储作业/作业流的执行状态信息
- AzkabanWebServer,web管理服务器,主要负责权限验证、项目管理、作业流下发等工作
- AzkabanExecutorServer,执行服务器,主要负责作业流/作业的具体执行以及搜集执行日志等工作

作业流执行过程:Webserver会根据搜集起来的Executor的状态选择一个合适的任务运行节点,并将任务推送给该节点,管理并运行该工作流的所有job
二、前置准备
1. 服务分布
Multiple Executor模式,各机器组件分配如下:
机器 | 组件 |
---|---|
azkaban1 | azkaban-exec-server、mysql-server |
azkaban2 | azkaban-exec-server |
azkaban3 | azkaban-exec-server、azkaban-web-server |
2. 安装 jdk
此处使用的是jdk1.8,
3. 配置 mysql
此处使用的是mysql5.7,安装步骤略
# 创建并使用数据库CREATE DATABASE azkaban;use azkaban;# 创建用户并授权CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'; GRANT ALL ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES;# 导入建表语句source azkaban/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql;


三、集群部署
1. 下载源码 & 解压
# 下载wget https://github.com/azkaban/azkaban/archive/3.73.1.tar.gz# 重命名mv 3.73.1.tar.gz azkaban-3.73.1.tar.gz# 解压tar xvf azkaban-3.73.1.tar.gz
2. 安装所需依赖
yum install -y gcc-c++ git
3. 执行编译
cd azkaban-3.73.1/# 编译 第一次运行时,此过程时间会比较长# -x test 表示跳过测试./gradlew build installDist -x test
看到如下,表示成功
4. 编译后的主要目录:
目录 | 说明 |
---|---|
azkaban-common | 常用工具类 |
azkaban-db | 对应的sql脚本 |
azkaban-exec-server | azkaban的executor-server单独模块 |
azkaban-hadoop-secutity-plugin | hadoop有关kerberos插件 |
azkaban-solo-server | web和executor运行在同一进程的项目 |
azkaban-spi | azkaban存储接口以及exception类 |
azkaban-web-server | azkaban的web-server单独模块 |
5. 拷贝我们所需的文件并解压
# 所需位置新建azkaban目录mkdir azkaban# copycp azkaban-3.73.1/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban/cp azkaban-3.73.1/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban/cp azkaban-3.73.1/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz azkaban/
cd azkaban/# 解压tar xvf azkaban-db-0.1.0-SNAPSHOT.tar.gztar xvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gztar xvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz# 软链ln -s azkaban-db-0.1.0-SNAPSHOT azkaban-dbln -s azkaban-exec-server-0.1.0-SNAPSHOT azkaban-execln -s azkaban-web-server-0.1.0-SNAPSHOT azkaban-web
四、集群配置
1. 配置 WebServer
1.1 配置 jetty SSL
cd azkaban-web# 生成keystore# 注意开始和结束的时候输入的密码,其他按提示输入即可keytool -keystore keystore -alias jetty -genkey -keyalg RSA

1.2 修改conf/azkaban.properties
# Azkaban Personalization Settingsazkaban.name=Testazkaban.label=My Local Azkabanazkaban.color=#FF3601azkaban.default.servlet.path=/indexweb.resource.dir=web/default.timezone.id=Asia/Shanghai# Azkaban UserManager classuser.manager.class=azkaban.user.XmlUserManageruser.manager.xml.file=conf/azkaban-users.xml# Loader for projectsexecutor.global.properties=conf/global.propertiesazkaban.project.dir=projects# Velocity dev modevelocity.dev.mode=false# Azkaban Jetty server properties.#jetty.use.ssl=falsejetty.maxThreads=25jetty.ssl.port=8443jetty.port=8081jetty.keystore=keystorejetty.password=123456jetty.keypassword=123456jetty.truststore=keystorejetty.trustpassword=123456# Azkaban Executor settingsexecutor.port=12321# mail settingsmail.sender=mail.host=job.failure.email=job.success.email=lockdown.create.projects=falsecache.directory=cache# JMX statsjetty.connector.stats=trueexecutor.connector.stats=true# Azkaban mysql settings by default. Users should configure their own username and password.database.type=mysqlmysql.port=3306mysql.host=azkaban1mysql.database=azkabanmysql.user=azkabanmysql.password=azkabanmysql.numconnections=100#Multiple Executorazkaban.use.multiple.executors=trueazkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatusazkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1azkaban.executorselector.comparator.Memory=1azkaban.executorselector.comparator.LastDispatched=1azkaban.executorselector.comparator.CpuUsage=1
1.3 配置conf/azkaban-users.xml
我这里新增加了一条admin,具有所有权限

1.4 启动 WebServer
注意:执行命令时的目录,否则会找不到某些文件
cd azkaban-web# 启动bin/start-web.sh
可以看到如下信息,因为当前还没有 Executors呢
2. 配置 ExecutorsServer
所有的ExecutorsServer服务器均按如下配置即可
2.1 修改conf/azkaban.properties
# Azkaban Personalization Settingsdefault.timezone.id=Asia/Shanghai# Loader for projectsexecutor.global.properties=conf/global.propertiesazkaban.project.dir=projects# Velocity dev modevelocity.dev.mode=false# Azkaban Jetty server properties.jetty.use.ssl=falsejetty.maxThreads=25jetty.port=8081azkaban.jobtype.plugin.dir=plugins/jobtypesdatabase.type=mysqlmysql.port=3306mysql.host=azkaban1mysql.database=azkabanmysql.user=azkabanmysql.password=azkabanmysql.numconnections=100# Azkaban Executor settingsexecutor.maxThreads=50executor.flow.threads=30executor.connector.stats=trueexecutor.port=12321azkaban.use.multiple.executors=trueazkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatusazkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1azkaban.executorselector.comparator.Memory=1azkaban.executorselector.comparator.LastDispatched=1azkaban.executorselector.comparator.CpuUsage=1
2.2 启动
注意:执行命令时的目录,否则会找不到某些文件
cd azkaban-exec# 启动bin/start-exec.sh
2.3 重新启动WebServer
如果还是看到如下信息:
解决方式:登录azkaban使用的mysql数据库,查看executors表中是否存在active=1的executor,如果没有,修改active字段,而后再次启动即可
修改:
update executors set active = 1 where id = 1;
参考
- 官方: