Azkaban作业调度

目前公司Hadoop群集均使用Crontab进行作业调度,简单暴力,但在 Job 数量庞大的情况下,Crontab 脚本的编写,变得异常复杂。其调度的过程也不能透明化,让管理变得困难。我们需要一个作业调度平台对作业进行管理监控。多方比较后决定使用开源Azkaban作为调度平台。Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。以下是安装记录。

azkaban2overviewdesign

编译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

打赏支持:如果你觉得我的文章对你有所帮助,可以打赏我哟。