一、简介
Azkaban是LinkedIn开源的任务调度框架,类似于JavaEE中的JBPM和Activiti工作流框架。 如ETL的过程,Sqoop在凌晨1点从RDBMS中抽取数据(E),在凌晨2点用Hadoop或Spark转换数据(T),在凌晨3点用Sqoop再把结果数据加载(L)进RDBMS或NOSQL,假设没有Azkaban这样的调度框架,一般用crontab+shell,但crontab+shell虽然简单易用,但也有明显的缺点,如任务的依赖处理、任务监控、任务流的可视化等,就需要一个调度框架来统一。 常见的任务调度框架有Apache Oozie、LinkedIn Azkaban、Apache Airflow、Alibaba Zeus,由于Azkaban具有轻量可插拔、友好的WebUI、SLA告警、完善的权限控制、易于二次开发等优点,也得到了广泛应用。
二、Azkaban三个关键组件的作用
- Relational Database:存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等。
- AzkabanWebServer:项目管理、权限授权、任务调度、监控executor。
- AzkabanExecutorServer:作业流执行的Server。
三、安装部署
- 编译环境
yum install git gcc-c++
- 下载源码&解压&编译
wget https://github.com/azkaban/azkaban/archive/3.52.0.tar.gz
tar zxf 3.52.0.tar.gz
cd azkaban-3.52.0/
./gradlew build installDist -x test
- 编译后生成的安装包路径
cp azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz /opt
cp azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz /opt
cp azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz /opt
- 创建数据(安装MySQL略)
create database azkaban default charset latin1;
grant all on azkaban.* to azkaban@'%' identified by 'redhat';
flush privileges;
` * 导入表结构
cd azkaban-3.52.0/azkaban-db/build/sql
mysql -uroot -p azkaban < create-all-sql-0.1.0-SNAPSHOT.sql
四、分布式部署
- 节点规划
cdh-001 web-server exec-server mysql
cdh-002 exec-server
cdh-003 exec-server
- 生成SSL
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
注:密码和最后确认需要输入,其他默认即可。
cp keystore /opt/azkaban/web-server/conf/keystore
- 解压缩安装包
cd /opt/ && mkdir -p /opt/azkaban/
for a in azkaban-*; do tar zxf $a; done
mv azkaban-exec-server-0.1.0-SNAPSHOT /opt/azkaban/exec-server
mv azkaban-solo-server-0.1.0-SNAPSHOT /opt/azkaban/solo-server
mv azkaban-web-server-0.1.0-SNAPSHOT /opt/azkaban/web-server
- 修改配置
vim /opt/azkaban/solo-server/conf/azkaban.properties
default.timezone.id=Asia/Shanghai #修改默认时区
cp /opt/azkaban/solo-server/conf/* /opt/azkaban/web-server/conf
vim /opt/azkaban/web-server/conf/azkaban.properties
database.type=mysql
mysql.port=3306
mysql.host=cdh-001
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
jetty.keystore=/opt/azkaban/web-server/conf/keystore
jetty.password=redhat
jetty.keypassword=redhat
jetty.truststore=/opt/azkaban/web-server/conf/keystore
jetty.trustpassword=redhat ##SSL密码
azkaban.use.multiple.executors=true
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1
- 添加azkaban.native.lib=false 和 execute.as.user=false属性
cd /opt/azkaban/web-server/
mkdir -p plugins/jobtypes
cat > commonprivate.properties <<EOF
azkaban.native.lib=false
execute.as.user=false
EOF
- 启动WEB-server
cd /opt/azkaban/web-server/
bin/azkaban-web-start.sh
- 从web-server拷贝conf目录、plugins目录并启动executor‐server
cd /opt/azkaban/exec-server
cp /opt/azkaban/web-server/plugins .
bin/azkaban-executor-start.sh
注:同理将exec-server scp至002-003服务器启动即可
- 在在azkaban库executors表中激活节点
MariaDB [(none)]> use azkaban
Database changed
MariaDB [azkaban]> select * from executors;
+----+-------------------------+-------+--------+
| id | host | port | active |
+----+-------------------------+-------+--------+
| 3 | cdh-001 | 12321 | 0 |
| 4 | cdh-002 | 12321 | 0 |
| 6 | cdh-003 | 12321 | 0 |
+----+-------------------------+-------+--------+
2 rows in set (0.00 sec)
MariaDB [azkaban]> update executors set active=1;
- 验证
#jps 验证
30835 AzkabanWebServer
15169 AzkabanExecutorServer
- WEB登陆
http://cdh-001:8081
azkaban/azkaban