Azkaban 任务调度工具

概述

Azkaban是由Linkedin公司推出的⼀个批量⼯作流任务调度器,主要⽤于在⼀个⼯作流内以⼀个特定的顺序运⾏⼀组⼯作和流程,它的配置是通过简单的key:value对的⽅式,通过配置中的dependencies 来设置依赖关系,这个依赖关系必须是⽆环的,否则会被视为⽆效的⼯作流。Azkaban使⽤job配置⽂件建⽴任务之间的依赖关系,并提供⼀个易于使⽤的web⽤户界⾯维护和跟踪你的⼯作流。zkaban的设计⾸先考虑了可⽤性。它已经在LinkedIn上运⾏了⼏年,并驱动了许多Hadoop和数据仓库流程。

知名度⽐较⾼的应该是 Apache Oozie,但是其配置⼯作流的过程是编写⼤量的XML配置,⽽且代码复杂度⽐较⾼,不易于⼆次开发。另外⼀个应⽤也⽐较⼴泛的调度系统是 Airflow,但是其开发语⾔是
Python。

选择Azkaban的理由:

  • 提供功能清晰,简单易⽤的Web UI界⾯
  • 提供job配置⽂件快速建⽴任务和任务之间的依赖关系
  • 提供模块化和可插拔的插件机制,原⽣⽀持command、Java、Hive、Pig、Hadoop
  • 基于Java开发,代码结构清晰,易于⼆次开发

架构

Azkaban 任务调度工具_第1张图片

AzkabanLinkedIn上实施,以解决Hadoop作业依赖问题。我们有⼯作需要按顺序运⾏,从ETL⼯作到数据分析产品。最初是单⼀服务器解决⽅案,随着多年来Hadoop⽤户数量的增加,Azkaban 已经发展成为⼀个更强⼤的解决⽅案。Azkaban总共有三个⻆⾊:关系型数据库(MySQL)AzkabanWebServerAzkabanExecutorServer

Azkaban使⽤MySQL存储服务状AzkabanWebServerAzkabanExecutorServer都需要访问MySQL的DB数据库

  • 参考资料: https://azkaban.github.io/azkaban/docs/latest/
  • AzkabanWebServer 是所有Azkaban的主要管理器。它处理项⽬管理身份验证调度程序执⾏监视。它还⽤作Web⽤户界⾯,使得 使⽤Azkaban很容易。
  • Azkaban使⽤* .job键值属性⽂件来定义⼯作流程中的各个任务,并使⽤dependencies 属性来定义作业的依赖关系链。这些作业⽂件和相关的代码可以存档为*.zip,并通过Azkaban UI或curl通过Web服务器上传。以前的Azkaban版本(version 3.0之前)在单个服务器中同时具有AzkabanWebServer和AzkabanExecutorServer功能。此后,执⾏程序已被分离到单独的服务器中。拆分这些服务的原因有很多:⽅便的扩展Executor的数量,并在失败的情况下可以恢复。离以后在对Azkaban升级的时候对⽤户的使⽤影响很⼩。

安装使用

version 3.0 中我们提供了三种模式:独⽴的"solo-server"模式、较重的"two server"模式以及"multipleexecutor"模式。

  • 其中solo server mode使⽤的内嵌的H2 DB,所有的web server和executor server运⾏在⼀个相同的进程中,该种模式适合测试或者任务调度规模⽐较⼩;
  • two server mode⽤于⽣产环境,后台的DB数据库使⽤MySQL,其中Webserver和executorserver应该被部署在不同的主机上;
  • multiple executor mode 也通常⽤于⽣产环境,后台的DB数据库使⽤MySQL,其中Webserver和executorservers应该被部署在不同的主机上;

单机 mode

编译软件 (推荐不要自己执行,亦可省略,直接开始②)
[root@pro1~] yum install git
[root@pro1~] git clone https://github.com/azkaban/azkaban.git
[root@pro1~] cd azkaban/
[root@pro1azkaban] ./gradlew build installDist

由于编译时间过长(可能几个小时),这里附上已编译好的安装包
https://pan.baidu.com/s/1AI7QBfyMDDAxJ3V5x_TkDQ 提取码:gvcc

安装单机

获取编译完成后安装目录下的 azkaban-solo-server-*.tar.gz,进行解压。

  • 这里也附上此tar包,可以不再使用①中的初始安装包。
    https://pan.baidu.com/s/14cMfemocG1EW9xddBo-J3w 获取码:e5dx

执行如下命令:

[root@pro1 azkaban] tar -zxf azkaban-solo-server/build/distributions/azkaban-soloserver-3.81.0-1-g304593d.tar.gz -C /usr/
[root@pro1 azkaban] cd /usr/
[root@pro1 usr] mv azkaban-solo-server-3.81.0-1-g304593d azkaban-solo-server
修改 azkaban.properties 配置⽂件

进入conf目录,执行如下命令

default.timezone.id=Asia/Shanghai #修改时区
jetty.port=8082 #配置azkabanweb服务器地址,避免与单机环境下的 flink冲突
修改commonprivate.properties配置⽂件
[root@pro1 azkaban-exec-server] vim plugins/jobtypes/commonprivate.properties

修改如下配置

memCheck.enabled=false #关闭执⾏节点内存检查,默认如果执⾏节点内存⼩于6GB,不会提交任务
启动
[root@pro1 azkaban-solo-server] ./bin/start-solo.sh #启动

[root@pro1 azkaban-solo-server] jps
5638 AzkabanSingleServer
5679 Jps
测试

访问 端口: 8082 (对应③中配置的端口位置
Azkaban 任务调度工具_第2张图片
username : azkaban
password: azkaban
Azkaban 任务调度工具_第3张图片

关于测试的方法,一致放在 集群模式下 展示。

关闭
[root@pro1 azkaban-solo-server] ./bin/shutdown-solo.sh
Killing solo-server. [pid: 18912], attempt: 1
shutdown succeeded

集群 mode

安装配置MySQL
  • 略去安装
  • 准备好特定sql 文件 : https://pan.baidu.com/s/1FpbFxbnhr65cBPZxuuhSFQ 获取码:lsgv
  • 初始化azkaban服务运⾏所需的基本数据
# 创建库
mysql> create database azkaban;
Query OK, 1 row affected (0.00 sec)

# 查看库
mysql> show create database azkaban;
+----------+--------------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------------+
| azkaban | CREATE DATABASE `azkaban` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)

#使用库
mysql> use azkaban;
Database changed

# 加载sql文件
mysql> source /root/create-all-sql-3.81.0-1-g304593d.sql
Query OK, 0 rows affected (0.00 sec)
...
Query OK, 0 rows affected (0.00 sec)

#有34个表才是成功
mysql> show tables;
.
.
34 rows in set (0.00 sec)
②安装Executor-Server(在所有集群节点上

安装包获取:https://pan.baidu.com/s/1lztuUl1-o_X_bd6EtlWU0A 获取码:zih8
执行如下命令:

[root@pro2 ~] tar -zxf azkaban-exec-server-3.81.0-1-g304593d.tar.gz -C /usr/zylsoft/
[root@pro2 ~] cd /usr/zylsoft/
[root@pro2 zylsoft] mv azkaban-exec-server-3.81.0-1-g304593d/ azkaban-exec-server
[root@pro2 zylsoft] cd azkaban-exec-server/
②-1.配置azkaban.properties
[root@pro2 azkaban-exec-server] vim conf/azkaban.properties 

配置以下内容

# Azkaban Personalization Settings
# 改时区
default.timezone.id=Asia/Shanghai

# 改ip、端口
# Azkaban Jetty server properties.
jetty.port=8082

# Where the Azkaban web server is located
# 改IP、端口
azkaban.webserver.url=http://pro1:8082

# mail settings
mail.sender= #你的邮箱地址
mail.host=smtp.qq.com #邮箱类型
mail.user= #你的邮箱地址
mail.password= #邮箱的授权码|密码
# 任务调度成功&失败的发送邮箱
job.failure.email= #你的邮箱地址
job.success.email= #你的邮箱地址
jetty.ssl.port) are used.

#修改 mysql配置
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=pro1
  sql.database=azkaban
mysql.user=root
mysql.password=000
②-2.配置commonprivate.properties

进入此文件中

[root@pro1 azkaban-exec-server] vim plugins/jobtypes/commonprivate.properties

修改:

memCheck.enabled=false #关闭内存检查
②-3.启动azkaban执⾏服务器
[root@pro2 azkaban-exec-server] ./bin/start-exec.sh 
[root@pro2 azkaban-exec-server] jps
1635 Jps
1620 AzkabanExecutorServer
②-4.激活azkaban执⾏服务器(每次重启,都需要激活)
[root@pro2 azkaban-exec-server] curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo

{“status”:“success”} 显示此状态表示启动成功

③安装Azkaban的web服务器(只有⼀个,任一台服务器上安装)

软件获取包: https://pan.baidu.com/s/1j8ymmfN9uX1GfSTzcHp1Sw 获取码:vhar

③-1. 安装
[root@pro1 ~] tar -zxf azkaban-web-server-3.81.0-1-g304593d.tar.gz -C /usr/
[root@pro1 ~] mv /usr/azkaban-web-server-3.81.0-1-g304593d/ /usr/azkaban-webserver/
③-2.配置azkaban.properties
[root@pro1 azkaban-web-server] vi conf/azkaban.properties

修改以下配置:

# Azkaban Personalization Settings
# 修改时区
default.timezone.id=Asia/Shanghai

# Azkaban Jetty server properties.
# 修改端口
jetty.port=8082

# mail settings
mail.sender=********@qq.com
mail.host=smtp.qq.com
mail.user=********@qq.comail.password=邮箱的授权码|密码
# 任务调度成功&失败的发送邮箱
job.failure.email=********@qq.com
job.success.email=********@qq.com

# Azkaban mysql settings by default. Users should configure their own username and password.
# 修改MySQL配置
database.type=mysql
mysql.port=3306
mysql.host=pro1
mysql.database=azkaban
mysql.user=root
mysql.password=000
mysql.numconnections=100


#Multiple Executor
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
#关闭对执行服务器的内存检查-测试环境才需要关闭
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus 
③-3.启动、关闭
[root@pro1 azkaban-web-server] ./bin/start-web.sh
#停止指令
[root@pro1 azkaban-web-server] ./bin/shutdown-web.sh
④测试

访问 8082端口 ,与 ③-2中配置的端口一致
Azkaban 任务调度工具_第4张图片
username : azkaban
password: azkaban

测试

参考 https://blog.csdn.net/weixin_38231448/article/details/103847194
Flow1.0

type=command
command=echo ‘Hello Azkaban!’

将以上⽂件打包成zip包然后上传!

Flow 2.0
1、创建xxx.project⽂件

azkaban-flow-version: 2.0

2.创建⼀个xxx.flow

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

将以上⽂件打包成zip包然后上传!

5种测试标准zip包获取:

https://pan.baidu.com/s/1rcT3N5ALhtZ-AY7m76yKRQ 获取码:z2q3

  • ex-1 echo命令

  • ex-2 shell脚本

  • ex-3 java代码

  • ex-4 多个⽆关job-并⾏ (文件名可能有误,打开后请自行修改)

  • ex-5 内嵌流 (文件名可能有误,打开后请自行修改)

  • 补充

配置邮件服务示例:

---
config:
 user.to.proxy: root
 failure.emails: [email protected],[email protected]
 success.emails: [email protected],[email protected]
 notify.emails: [email protected],[email protected]
 
nodes:
 - name: job01
 type: command
 config:
 command: sh ./demo08/bin/hdfs.sh

你可能感兴趣的:(Azkaban)