Azkaban作业调度
默认分类
2020-01-15
465
0
目前公司Hadoop群集均使用Crontab进行作业调度,简单暴力,但在 Job 数量庞大的情况下,Crontab 脚本的编写,变得异常复杂。其调度的过程也不能透明化,让管理变得困难。我们需要一个作业调度平台对作业进行管理监控。多方比较后决定使用开源Azkaban作为调度平台。Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。以下是安装记录。
编译Azkaban源码
1.下载源码
wget https://codeload.github.com/azkaban/azkaban/zip/3.19.0
2.编译
# Build Azkaban
./gradlew build
配置数据库
数据库创建
Azkaban使用的是MySQL数据库
1.创建数据库
# Example database creation command, although the db name doesn't need to be 'azkaban'
mysql> CREATE DATABASE azkaban;
2.为azkaban数据库创建用户
# Example database creation command. The user name doesn't need to be 'azkaban'
mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
3.授予用户Azkaban数据库中所有表的INSERT, SELECT, UPDATE, DELETE权限
# Replace db, username with the ones created by the previous steps.
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON <database>.* to '<username>'@'%' WITH GRANT OPTION;
4.修改Packet大小并重启MySQL服务
打开/etc/my.cnf并在mysqld一段下方添加
[mysqld]
...
max_allowed_packet=1024M
重启服务
$ sudo /sbin/service mysqld restart
创建Azkaban表
进入源码目录找到create-all-sql并执行
mysql -u username -p database_name < /azkaban-3.19.0/azkaban-sql/build/sql/create-all-sql-0.1.0-SNAPSHOT.sql
JDBC驱动
因为一些原因,Azkaban并不包含JDBC驱动,从官方下载驱动并放入web server和executor server的/extlib目录
配置Azkaban Web Server
安装 Web Server
将我们编译好的Web Server包解压至一个目录即可
unzip azkaban-web-server-0.1.0-SNAPSHOT.zip
设置数据库
创建extlib目录把MySQL Jar包扔进去 然后在azkaban.properties文件中配置数据库信息,虽然有database.type这个属性但是目前只支持mysql
mkdir extlib
mkdir conf
mkdir plugins
vim conf/azkaban.properties
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
设置UserManager
Azkaban通过UserManager来验证用户。 默认情况下Azkaban使用XmlUserManager来获取azkaban-users.xml中的用户名和密码。azkaban.properties中配置如下
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
运行Web Server
在azkaban.properties中通过以下属性配置jetty。
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
如果要采用加密访问,则需要生成证书,并使用以下配置
# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8081
jetty.keystore=keystore
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password
在Web Server根目录中生成keystore文件
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
执行bin/azkaban-web-start.sh来启动AzkabanWebServer。 停止服务执行bin/azkaban-web-shutdown.sh
配置Azkaban Executor Server
安装 Executor Server
将我们编译好的Executor Server包解压至一个目录即可
unzip azkaban-exec-server-0.1.0-SNAPSHOT.zip
设置数据库
同 Azkaban Web Server
配置AzabanWebServer 和 AzkabanExecutorServer 客户端
以下属性配置在AzkabanExecutorServer的azkaban.properties文件中
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
需要让AzkabanWebServer知道executor的端口,因此需要在 AzkabanWebServer的azkaban.properties添加executor的端口信息
executor.port=12321
运行Executor Server
执行bin/azkaban-exec-start.sh启动AzkabanExecutorServer. 关闭AzkabanExecutorServer执行bin/azkaban-exec-shutdown.sh
也可以执行nohup,后台运行 nohup bin/azkaban-exec-start.sh &
安装 Azkaban 插件
下载最新插件并编译 https://github.com/azkaban/azkaban-plugins.git
jobtype
内置的job type只支持unix命令和简单的java程序。 如果需要Hadoop相关应用支持就需要编译了。
cd /azkaban-plugins-3.0.0/plugins/jobtype
ant package
Execute-As-User
Azkaban支持以另一个用户执行程序,建立目录如下
/root/azkaban/azkaban-exec-server/plugins/jobtypes
创建属性文件 commonprivate.properties
# configs for jobtype security settings
execute.as.user=true
azkaban.native.lib=/root/azkaban/azkaban-exec-server/plugins/jobtypes
生成execute-as-user文件
cp /azkaban-3.19.0/azkaban-common/src/main/c/execute-as-user.c