Azkaban3.57.0源码编译及简单的使用

Posted by JustDoDT on May 16, 2019

为什么要使用WorkFlow?

因为在生产中的ETL,以及HQL等作业都是通过shell命令触发执行的,在Linux中自带了Crontab调度器,通过它可以进行简单作业的调度,但是对于一些依赖的作业,比如作业B依赖于作业A完成后才能开始,这是Crontab很难去配置了,因为配置Crontab人根本不知道作业具体是何时完成的,全凭经验感觉,这是不可取的。此时我们需要Work Flow来规划好作业的执行调度。市场主流的工作流有两种:Oozie以及Azkzban。

常用的工作流对比

  • Oozie:重量级的,不推荐使用,开发需要写一堆XML配置,非常的麻烦
  • Azkzban:轻量级的,推荐使用,具有很好的WEBUI交互设计,但是也是比较难用,部分功能需要自定义开发,如无短信通知功能。

Azkaban简介

  • 首先它不是apache项目,但属于开源项目,官网地址:https://azkaban.github.io/
  • 它是用于运行hadoop生态圈相关作业的批量工作流调度器,主要用于解决作业间的依赖问题,它提供了一个良好的Web操作界面。

  • 两种部署模式:无论哪一种部署模式都会包含所有的特性
    • solo-server mode :单机模式,内置了H2数据库,web和executor服务运行在一个进程上,可用于测试,本次测试部署的是单机模式。
    • multiple-executor mode:集群模式,DB使用的是有主备的mysql,升级维护不影响使用,用于生产
  • 具体特性详见官网 两种部署模式的区别

安装Azkaban

安装以3.57.0版本的Azkabab需要有jdk1.8、gradle、git环境,gradle是类似于maven一样的jar依赖管理工具。

下载安装包

  • 下载Azkaban:因为Azkaban不是Apache的项目,只有在github上才有。下载地址

Azkaban源码编译及使用

  • 下载gradle:下载地址 ,我是选择的4.5.1版本的

配置gradle安装包

因为使用gradlew编译的时候会自动下载gradle,但是由于网络的原因,我们选择手动下载安装包然后拷贝到Azkaban的/gradle/wrapper/目录

[hadoop@hadoop001 software]$ tar -zxvf azkaban-3.57.0.tar.gz -C /home/hadoop/sourcecode

[hadoop@hadoop001 software]$ cp gradle-4.5.1-all.zip /home/hadoop/sourcecode/azkaban-3.57.0/gradle/wrapper/

[hadoop@hadoop001 wrapper]$ ll
total 99536
-rw-r--r--. 1 hadoop hadoop 101862201 May 16 22:48 gradle-4.5.1-all.zip
-rw-rw-r--. 1 hadoop hadoop     54708 Sep  5  2018 gradle-wrapper.jar
-rw-rw-r--. 1 hadoop hadoop       779 Sep  5  2018 gradle-wrapper.properties

# 修改distributionUrl配置
[hadoop@hadoop001 wrapper]$ vi gradle-wrapper.properties 
...
distributionUrl=gradle-4.5.1-all.zip

安装git

[root@hadoop001 ~]$ yum install -y git
[root@hadoop001 ~]# git --version
git version 1.7.1

编译Azkaban

注意:编译命令为./gradlew build installDist -x test,-x test表示跳过测试,跳过测试可以大大降低编译所需要的时间。

[hadoop@hadoop001 azkaban-3.57.0]# ./gradlew build installDist -x test
...
> Task :az-hadoop-jobtype-plugin:compileJava 
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: /home/hadoop/sourcecode/azkaban-3.57.0/az-hadoop-jobtype-plugin/src/main/java/azkaban/jobtype/HadoopSecureSparkWrapper.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.


BUILD SUCCESSFUL in 7m 7s
83 actionable tasks: 83 executed

安装Azkaban

[hadoop@hadoop001 azkaban-3.57.0]$ cd azkaban-solo-server/build/distributions/
[hadoop@hadoop001 distributions]$ ll
total 46760
-rw-rw-r--. 1 hadoop hadoop 23879214 May 17 01:47 azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
-rw-rw-r--. 1 hadoop hadoop 24001751 May 17 01:47 azkaban-solo-server-0.1.0-SNAPSHOT.zip
[hadoop@hadoop001 distributions]$ pwd
/home/hadoop/sourcecode/azkaban-3.57.0/azkaban-solo-server/build/distributions
[hadoop@hadoop001 distributions]$ 
[hadoop@hadoop001 distributions]$ tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ~/app/

# 配置Azkaban
[hadoop@hadoop001 conf]$ pwd
/home/hadoop/app/azkaban-solo-server-0.1.0-SNAPSHOT/conf
[hadoop@hadoop001 conf]$ vi azkaban.properties 
# Azkaban Personalization Settings
azkaban.name=JustDoDT
azkaban.label=JustDoDt Azkaban
....

[hadoop@hadoop001 conf]$ vi azkaban-users.xml   
....  
# 新增一行
<user password="123123" roles="admin" username="justdodt"/>


# 启动Azkaban
[hadoop@hadoop001 azkaban-solo-server-0.1.0-SNAPSHOT]$ bin/start-solo.sh 
[hadoop@hadoop001 azkaban-solo-server-0.1.0-SNAPSHOT]$ jps
4483 Jps
4456 AzkabanSingleServer
[hadoop@hadoop001 azkaban-solo-server-0.1.0-SNAPSHOT]$ 

Azkaban源码编译及使用

测试

首先创建两个文件(basic.flow;flow20.project),并把他们放在同一个目录下

basic.flow文件内容

nodes:
  - name: jobC
    type: noop
    # jobC depends on jobA and jobB
    dependsOn:
      - jobA
      - jobB

  - name: jobA
    type: command
    config:
      command: echo "This is an echoed text."

  - name: jobB
    type: command
    config:
      command: pwd

flow20.project文件内容

azkaban-flow-version: 2.0

将上面2个文件打包为.zip格式的压缩包

然后在Azkaban中创建项目,上传工作流

执行成功的截图为:

Azkaban源码编译及使用

Azkaban源码编译及使用

其他操作详见官方文档

Azkaban官方文档

总结

  • 以上是Azkaban的安装以及简单使用的过程,无论是学习还是生产使用都是有很大的帮助

  • 对于生产上Oozie与Azkaban的选择,个人倾向于更加轻量简单的后者,但是Azkaban不能配置短信告警

  • 两种工作流框架都是有个致命的缺点,不能完全的面向用户,若用户能够在页面拖拽拉实现工作流的配置那就更加的完美了,故大公司都是自研工作流框架。