Azkaban部署与入门(3.X)

Azkaban简介

Azkaban 一个批量工作流任务调度器,使用Java语言开发。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流,当然Azkaban也可以使用API,来调用相应的操作和任务。

Azkaban 的优点:

  1. 提供功能清晰,简单易用的Web UI界面
  2. 提供job配置文件快速建立任务和任务之间的依赖关系
  3. 提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop
  4. 基于Java开发,代码结构清晰,易于二次开发

Azkaban 有三种安装部署方式: 

  1. solo server model(单服务模式):该模式中 webServer 和 executorServer 运行在同一个进程中,进程名是AzkabanSingleServer。可以使用自带的H2数据库或者配置mysql数据。该模式适用于小规模的使用。此模式合适个人试用使用。它也可以用在小规模的使用案例中。
  2. two server model(2个服务模式):数据库为mysql,采用主从设置进行备份,管理服务器(webServer)和执行服务器(executorServer)在不同进程中运行,这种模式下,管理服务器和执行服务器互不影响。适用在较重的生成环境中。
  3. multiple-executor(分布式多服务模式):存放元数据的数据库为mysql,采用主从设置进行备份,管理服务器(webServer)和执行服务器(executorServer)在不同进程中运行。多个 Executor 模式为最重的生产环境。
  • Azkaban安装部署

在集群环境下一般使用多服务器模式,two server和multiple-executor模式安装配置差不多,本文安装配置的是two server模式。solo模式安装比较简单,如果想要安装配置solo模式可以去官网查看。

  1. 安装前准备
  1. 在Vmware上安装linux环境
  2. 在linux上安装JDK1.8
  3. 在linux上安装MySQL
  1. 下载

在Azkaban的GitHub上下载Azkaban的安装包,本文下载的是Azkaban3.80.0版本,下载在/usr/local目录下,命令如下代码 1所示。

代码 1 下载Azkaban安装包

git clone https://github.com/azkaban/azkaban.git

  1. 编译

进入到刚刚下载完的Azkaban的目录下,执行命令./gradlew distTar,如图 1所示。

                                          Azkaban部署与入门(3.X)

                                                                          图 1 编译Azkaban安装包

  1. 拷贝

新建文件夹来存放azkaban-3.8的安装文件,将第3步编译好的Azkaban相关的安装包拷贝到新建文件azkaban-3.80.0,如代码 2所示。

代码 2 拷贝文件

cp azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-3.80.0-1-g94ddcf2.tar.gz azkaban-3.80.0/

cp azkaban/azkaban-web-server/build/distributions/azkaban-web-server-3.80.0-1-g94ddcf2.tar.gz azkaban-3.80.0/

cp azkaban/azkaban-db/build/distributions/azkaban-db-3.80.0-1-g94ddcf2.tar.gz azkaban-3.80.0/

  1. 解压 重命名

解压第4步拷贝到的安装包,为了方便后面的操作,重命名解压后的文件,如代码 3所示。

代码 3 解压 重命名

cd /usr/local/azkaban-3.80.0/

tar –zxvf azkaban-db-3.80.0-1-g94ddcf2.tar.gz

tar –zxvf azkaban-exec-server-3.80.0-1-g94ddcf2.tar.gz

tar –zxvf azkaban-web-server-3.80.0-1-g94ddcf2.tar.gz

#重命名

mv azkaban-db-3.80.0-1-g94ddcf2.tar.gz azkaban-db

mv azkaban-exec-server-3.80.0-1-g94ddcf2.tar.gz azkaban-web-server

mv azkaban-exec-server-3.80.0-1-g94ddcf2.tar.gz azkaban-exec-server

  1. 创建Azkaban元数据库

登录linux的mysql,创建Azkaban数据库,并导入相应的数据表,如代码 4所示。

代码 4 创建Azkaban元数据库

mysql> create database azkaban;

Query OK, 1 row affected (0.00 sec)

mysql> use azkaban;

Database changed

mysql> source /usr/local/azkaban-3.80.0/azkaban-db/create-all-sql-3.80.0-1-g94ddcf2.sql

创建的表如图 2所示。

                                                                               Azkaban部署与入门(3.X)

                                                                                        图 2 全部表名

  1. 创建SSL配置

为了后期可以使用Azkaban的API,需要配置SSL配置。使用keytool创建SSL配置,keytool是JDK提供的一个工具,输入如下代码 5命令。

代码 5 查找keytool

[email protected]:/usr/local/azkaban-3.80.0# find / -name keytool

/usr/local/jdk1.8.0_51/bin/keytool

/usr/local/jdk1.8.0_51/jre/bin/keytool

执行命令创建SSL配置,命令如代码 6所示,在配置SLL时,要注意的是密令的密码,三次的密码都一样的,本人设置的是123456,后面配置azkaban.properties时,需要输入这些密码。

代码 6 创建SSL配置

[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# keytool -keystore keystore -alias jetty -genkey -keyalg RSA

  1. 配置azkaban.properties ,添加mysql驱动

拷贝 azkaban-solo-server-3.80.0-1-g94ddcf2.tar.gz 到 azkaban-3.48.0 目录下,解压并重命名,如代码 7所示。

代码 7 添加驱动

cp /usr/local/azkaban/azkaban-solo-server/build/distributions/azkaban-solo-server-3.80.0-1-g94ddcf2.tar.gz /usr/local/azkaban-3.80.0

将azkaban-solo-server下的conf plugins 和sql文件夹拷贝到azkaban-exec-server,如代码 8所示。

代码 8 拷贝文件

cd /usr/local/azkaban-3.80.0/azkaban-solo-server

cp -a conf/ plugins/ sql/ /usr/local/azkaban-3.80.0/azkaban-exec-server

配置/usr/local/azkaban-3.80.0/azkaban-web-server/conf/azkaban.properties文件,如下表 1所示,红色文字部分是在原文件下修改的部分。

表 1 azkaban.properties文件

# Azkaban Personalization Settings

azkaban.name=Kang

azkaban.label=My Local Azkaban

azkaban.color=#FF3601

azkaban.default.servlet.path=/index

web.resource.dir=/usr/local/azkaban-3.80.0/azkaban-web-server/web

default.timezone.id=Asia/Shanghai

# Azkaban UserManager class

user.manager.class=azkaban.user.XmlUserManager

user.manager.xml.file=/usr/local/azkaban-3.80.0/azkaban-exec-server/conf/azkaban-users.xml

# Loader for projects

executor.global.properties=/usr/local/azkaban-3.80.0/azkaban-web-server/conf/global.properties

azkaban.project.dir=projects

#database.type=h2

#h2.path=./h2

#h2.create.tables=true

database.type=mysql

mysql.port=3306

mysql.host=192.168.128.200

mysql.database=azkaban

mysql.user=hive

mysql.password=hive

mysql.numconnections=100

# Velocity dev mode

velocity.dev.mode=false

# Azkaban Jetty server properties.

jetty.use.ssl=false

jetty.maxThreads=25

jetty.port=8081

# Azkaban Executor settings

executor.port=12321

# mail settings

mail.sender=

mail.host=

# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.

# enduser -> myazkabanhost:443 -> proxy -> localhost:8081

# when this parameters set then these parameters are used to generate email links.

# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.

job.failure.email=

job.success.email=

lockdown.create.projects=false

cache.directory=cache

# JMX stats

jetty.connector.stats=true

executor.connector.stats=true

# Azkaban plugin settings

azkaban.jobtype.plugin.dir=/usr/local/azkaban-3.80.0/azkaban-exec-server/plugins/jobtypes

# Number of executions to be displayed

azkaban.display.execution_page_size=16

azkaban.use.multiple.executors=true

# Azkaban Ramp Feature Configuration

#Ramp Feature Related

azkaban.ramp.enabled=true

azkaban.ramp.status.polling.enabled=true

azkaban.ramp.status.polling.interval.min=30

azkaban.ramp.status.push.interval.threshold=15

azkaban.ramp.status.pull.interval.threshold=100

# Azkaban Jetty server properties.

jetty.use.ssl=true

jetty.maxThreads=25

jetty.ssl.port=8443

jetty.keystore=/usr/local/azkaban-3.80.0/azkaban-web-server/keystore

jetty.password=123456

jetty.keypassword=123456

jetty.truststore=/usr/local/azkaban-3.80.0/azkaban-web-server/keystore

jetty.trustpassword=123456

需要注意的是,有几个文件是配置成绝对路径的,需要添加jetty的配置文件。

在conf目录下添加log4j.properties,如代码 9所示。

代码 9 添加log4j.properties文件

[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server/conf# touch log4j.properties

[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server/conf# vim log4j.properties

log4j.rootLogger=INFO,C

log4j.appender.C=org.apache.log4j.ConsoleAppender

log4j.appender.C.Target=System.err

log4j.appender.C.layout=org.apache.log4j.PatternLayout

log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

添加MySQL驱动,在azkaban-exec-server目录下创建文件夹:mkdir extlib,将lib目录下的mysql驱动复制到extlib目录下,如代码 10所示。

代码 10 创建extlib文件

[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# mkdir extlib

[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# cp lib/mysql-connector-java-5.1.28.jar extlib/

#拷贝azkaban-web-server目录下的conf和extlib到azkaban-exec-server目录下

[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# cp -a conf/ extlib/ ../azkaban-exec-server

  1. 启动,先启动exec-server(执行器),然后启动web-server(web服务)

启动exec-server命令如代码 11所示。

代码 11 启动/关闭exec服务

[email protected]:/usr/local/azkaban-3.80.0/azkaban-exec-server# bin/start-exec.sh

#指定executor

[email protected]:/usr/local/azkaban-3.80.0/azkaban-exec-server# curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo

#关闭执行器

[email protected]:/usr/local/azkaban-3.80.0/azkaban-exec-server# bin/shutdown-web.sh

启动web-server命令如代码 12所示。

代码 12 启动/关闭web服务

[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# bin/start-web.sh

[email protected]:/usr/local/azkaban-3.80.0/azkaban-web-server# bin/shutdown-web.sh

然后,Jps查看相应的进程有没有开启,如果发现如所示的,代表开启成功。如果无法显示下面进程,或者无法打开web页面,可以在azkaban-xxx-server的目录下,查看相应的开机日志,如图 3所示。

                                             Azkaban部署与入门(3.X)

                                                                                 图 3 java程序

  • Azkaban使用

在谷歌浏览器上输入https://node200:8443/,登录账号和密码都是azkaban。在界面上创建job工程,目前azkaban仅支持job文件,但需要解压成zip形式才能在azkaban上运行。

  1. 创建Project
    Azkaban部署与入门(3.X)
  2. 上传zip文件

 

本文测试的文件是Hive的测试文件,如表 2所示。

表 2hivejob

# hivef.job

type=command

command=/usr/local/apache-hive-1.2.2-bin/bin/hive -f '/opt/test/test.sql'

test.sql文件的代码,如表 3所示。

表 3 test.sql文件

drop table if exists student;

create table student(id int,name string,sex string,age int,deparment string) row format delimited fields terminated by ',';

load data local inpath '/opt/test/student.txt' into table student;

create table student_copy as select * from student;

insert overwrite directory '/aztest/hiveoutput' select count(1) from student_copy;

!hdfs dfs -cat /aztest/hiveoutput/000000_0;

drop database azkaban cascade;

student.txt文件,如表 4所示。

表 4 student.txt文件

1,zhangsan,nan,18,jishu

2,lishi,nv,19,chanpin

3,wangwu,nan,29,yunying

上传文件的操作如图 4所示。

                                       Azkaban部署与入门(3.X)

                                                                                        图 4 上传文件截图

  1. 运行hivejob测试文件

运行hivejob测试文件,点击Execute,如下图 5所示,左边的Schedule是进行一些定时时间等配置的调试。

                                        Azkaban部署与入门(3.X)

                                                                                        图 5 运行hive文件

  1. 运行脚本

任务正在运行,如图 6所示。

                                       Azkaban部署与入门(3.X)

                                                                                       图 6 任务运行截图

在任务运行前,需要保证hadoop和hive在集群上有安装,hadoop是开启状态。

如果出现一直在Running或Preparing态,有可能是跑任务的时候,内存不足。需要修

改exec-server/plugins/jobtypes/commonprivate.properties文件,添加memCheck.enabled=false这一行,关闭内存检测。

任务运行成功,如下图 7所示。

                                     Azkaban部署与入门(3.X)

                                                                                      图 7 任务成功截图

  1. 使用Azkaban API运行

通过curl进行的示例调用,显示success代表连接成功,这样也可以找到当前网页的session.id如下代码 13所示。

代码 13 调试Azkaban API

[email protected]:/usr/local# curl -k -X POST --data "action=login&username=azkaban&password=azkaban" https://localhost:8443

{

  "session.id" : "03b7dd5c-501d-495b-a0a6-3b449a3e7c1f",

  "status" : "success"

创建新项目的ajax API。注意:在上传任何项目zip文件之前,应首先通过此API创建项目。代码操作如代码 14所示。

代码 14 API创建项目

[email protected]:/usr/local# curl -k -X POST --data "session.id=03b7dd5c-501d-495b-a0a6-3b449a3e7c1f&name=aaaaa&description=11" https://localhost:8443/manager?action=create

{"path":"manager?project=aaaaa","action":"redirect","status":"success"}

如图 8所示,创建aaaaa,描述11的项目已经创建成功。这里只是验证这个API可以测通使用,具体的操作细节(设置cron时间,运行zip任务等)可以依照官网的命令来执行。

                                    Azkaban部署与入门(3.X)

                                                                            图 8 项目创建成功截图