安装包:

azkaban-executor-server-2.5.0.tar.gz

azkaban-web-server-2.5.0.tar.gz

azkaban-sql-script-2.5.0.tar.gz

azkaban-jobtype-2.5.0.tar.gz

1 配置MySql

目前 Azkaban 只支持 MySql ,故需安装 MySql 服务器,创建 azkaban 数据库,并创建 azkaban 用户,密码为 azkaban,并设置权限。

# Example database creation command, although the db name doesn't need to be 'azkaban'

mysql> CREATE DATABASE azkaban;

# Example database creation command. The user name doesn't need to be 'azkaban'

mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';

# Replace db, username with the ones created by the previous steps.

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;

解压缩 azkaban-sql-2.5.0.tar.gz文件,并进入到 azkaban-sql-script目录,然后进入 mysql 命令行模式:

$ mysql -uazkaban -pazkaban

mysql> use azkaban

mysql> source create-all-sql-2.5.0.sql

2 安装 azkaban-web-server

解压缩 azkaban-web-server-2.5.0.tar.gz,创建 SSL 配置,命令:keytool -keystore keystore -alias jetty -genkey -keyalg RSA

完成上述工作后,将在当前目录生成 keystore 证书文件,将 keystore 考贝到 azkaban web 目录中

修改 azkaban web 服务器配置,主要包括:

a. 修改时区和首页名称:

# Azkaban Personalization Settings

azkaban.name=ETL Task

azkaban.label=By BI

azkaban.color=#FF3601

azkaban.default.servlet.path=/index

web.resource.dir=web/

default.timezone.id=Asia/Shanghai

b. 修改 MySql 数据库配置

database.type=mysql

mysql.port=3306

mysql.host=localhost

mysql.database=azkaban

mysql.user=azkaban

mysql.password=azkaban

mysql.numconnections=100

c. 修改 Jetty 服务器属性,包括 keystore 的相关配置

# Azkaban Jetty server properties.

jetty.hostname=0.0.0.0

jetty.maxThreads=25

jetty.ssl.port=8443

jetty.port=8081

jetty.keystore=keystore

jetty.password=redhat

jetty.keypassword=redhat

jetty.truststore=keystore

jetty.trustpassword=redhat

d. 修改邮件设置(可选)

# mail settings

mail.sender=admin@javachen.com

mail.host=javachen.com

mail.user=admin

mail.password=admin

3 安装 azkaban-executor-server

解压缩 azkaban-executor-server-2.5.0.tar.gz,然后修改配置文件,包括:

a. 修改时区为:default.timezone.id=Asia/Shanghai

b. 修改 MySql 数据库配置

database.type=mysql

mysql.port=3306

mysql.host=localhost

mysql.database=azkaban

mysql.user=azkaban

mysql.password=azkaban

mysql.numconnections=100

4 用户设置

进入 azkaban web 服务器 conf 目录,修改 azkaban-users.xml ,增加管理员用户:

<azkaban-users>

<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />

<user username="metrics" password="metrics" roles="metrics"/>

<user username="admin" password="admin" roles="admin,metrics" />

<role name="admin" permissions="ADMIN" />

<role name="metrics" permissions="METRICS"/>

</azkaban-users>

5 启动服务

azkaban-web-server,需要在 azkaban-web-server 目录下执行下面命令:

sh bin/azkaban-web-start.sh

azkaban-executor-server,需要在 azkaban-executor-server 目录下执行下面命令:

sh bin/azkaban-executor-start.sh

访问azkaban webUI,地址:https://192.168.7.29:8443   用户名/密码:azkaban/azkaban

6 调试sqoop调度任务

示例1:通过azkaban调度单个job

创建两个文件:sqoop.job和sqoop.sh

sqoop.job文件内容如下:

# sqoop.job

type=command

command=sh sqoop.sh

sqoop.sh文件内容如下:

#!/bin/bash

hdfs dfs -rm -r /user/cloud/WF_JOBS

sqoop-import --connect jdbc:mysql://120.132.117.159:33306/oozie --username inputuser --password inputpass --table WF_JOBS

之后许将这两个文件打包成sqoop.zip(azkaban所需的文件格式),在页面中完成调度,地址为:https://hostname:8443

示例2:通过azkaban调度两个具有依赖关系的job

1.创建两个job,如sqoop1.job和sqoop2.job

sqoop1.job的内容如下:

# sqoop1.job

type=command

command=sh sqoop1.sh

sqoop1.sh文件内容如下:

#!/bin/bash

hdfs dfs -ls /user/hadoop/WF_JOBS

if [ $? -eq 0 ]; then

hdfs dfs -rm -r /user/hadoop/WF_JOBS

else

echo "begin import"

fi

sqoop-import --connect jdbc:mysql://120.132.117.159:33306/oozie --username inputuser --password inputpass --table WF_JOBS

sqoop2.job的内容如下:

# sqoop2.job

type=command

command=sh sqoop2.sh

dependencies=sqoop1

sqoop2.sh文件内容如下:

#!/bin/bash

sqoop eval connect jdbc:mysql://120.132.117.159:33306/oozie --username inputuser --password inputpass --query "select * from WF_JOBS limit 10"

2.将创建好的两个job及sh文件一起打包到一个zip压缩文件中

3.在azkaban webUI中创建一个project,并将zip上传到该project中

4.点击Execute flow按钮执行job,在azkaban webUI中的操作可以参考官方文档:http://azkaban.github.io/azkaban/docs/latest/。

注意事项:

1.shell脚本务必在linux环境下编写.

2.权限问题,如果调度的命令或脚本需要操作hdfs,启动azkaban需要用有hdfs操作权限的用户,或者在hadoop的core-site.xml中加上可访问的代理用户配置:

<property>

<name>hadoop.proxyuser.${username}.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.${username}.groups</name>

<value>*</value>

</property>