Azkaban 分布式multiple-executor模式部署

azkaban   大数据  

一、简介

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