Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
1、简介
官网: https://azkaban.github.io/
下载: https://github.com/azkaban/azkaban/releases
1.1、架构
1.2、三个关键组件的作用
- Relational Database:存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等。
- AzkabanWebServer:项目管理、权限授权、任务调度、监控executor。
- AzkabanExecutorServer:作业流执行的Server。
1.3、三种部署模式
1)、solo-server模式
DB使用的是一个内嵌的H2,Web Server和Executor Server运行在同一个进程里。这种模式包含Azkaban的所有特性,但一般用来学习和测试。
2)、two-server模式
DB使用的是MySQL,MySQL支持master-slave架构,Web Server和Executor Server运行在不同的进程中。
3)、分布式multiple-executor模式
DB使用的是MySQL,MySQL支持master-slave架构,Web Server和Executor Server运行在不同机器上,且有多个Executor Server。
2、下载安装
2.1、编译环境
1 | 安装jdk 1.8 |
2.2、下载源码编译
1 | wget https://github.com/azkaban/azkaban/archive/3.38.0.tar.gz -O azkaban-3.38.0.tar.gz |
1 | cd azkaban-3.38.0 |
2.3、列出编译产物
1 | solo-server模式安装包路径 |
3、multiple-executor集群搭建
1、WebServer 负责管理Job,存储在mysql中
2、mysql存储Job
3、ExecutorServer从mysql中读取任务执行,ExecutorServer要部署在定时任务机器上;
Azkaban WebServer挂掉,不影响已经提交的任务执行,主要是不能通过WebUI查看Job、管理Job、跟踪Job状态。
因此,对于这个架构,主要是要解决MySQL HA和ExecutorServer HA。官方支持ExecutorServer HA,我们只需要配一个MySQL HA就行了。
1 | mkdir -p /data/azkaban |
3.1、建立Azkaban数据库
1 | mysqladmin create db_azkaban -h 172.18.1.51 -P 3306 -uroot -p123456 |
3.2、生成SSL
1 | [root@localhost azkaban]# cd ~ |
3.3、设置 ExecutorServer
vi /data/azkaban/exec-server/conf/azkaban.properties
1 | # Azkaban Personalization Settings |
设置:
- default.timezone.id 时区配置
- user.manager.xml.file 登录用户配置
- azkaban.webserver.url 指向 webserver
- mysql.* mysql 相关配置
- mail.sender、mail.host、job.failure.email、job.success.email 邮件相关配置
启动:/data/azkaban/exec-server/bin/start-exec.sh
curl http://172.18.1.51:41096/executor?action=activate
1 | curl http://${executorHost}:${executorPort}/executor?action=activate |
3.4、设置 WebServer
1 | cd /data/azkaban/webserver/conf/ |
1 | 修改时区 |
vi /data/azkaban/webserver/conf/azkaban-users.xml
1 | <azkaban-users> |
mkdir -p /data/azkaban/webserver/plugins/jobtypes
vi /data/azkaban/webserver/plugins/jobtypes/commonprivate.properties
1 | azkaban.native.lib=false |
启动服务器
sh /data/azkaban/webserver/bin/start-web.sh
sh /data/azkaban/webserver/bin/shutdown-web.sh
注意:没有 ExecutorServer 启动,WebServer就是退出
select * from db_azkaban.executors
update db_azkaban.executors set active = 1 where id = 1;
浏览器访问: http://172.18.1.51:8081/index
使用admin/admin登录
3.5、配置Job
1)、创建project
2)、定义任务并上传
每个任务格式如下
1 | type=command |
完成后打包为 dailysettlement.zip, 上传到 Project dailysettlement下
3)、定制执行计划
每小时30分执行一次
4)、查看执行计划
3.6、执行任务的问题
1、集群内存不足,去掉webserver中的内存限制
vi webserver/conf/azkaban.properties
1 | azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus |
1 | ERROR [FlowTriggerScheduler] [Azkaban] Unable to get scheduled flow triggers |
2、ExcutorServer未激活,需要调用url手动去激活一下 executor,方式如下:
1 | curl http://${executorHost}:${executorPort}/executor?action=activate |
1 | 2019/11/22 14:25:23.831 +0800 ERROR [ExecutorServlet] [Azkaban] executor became inactive before setting up the flow 4 |