Azkaban在Mac上的部署

在Mac上部署Azkaban,需要踩得坑

一、介绍

1
2
Linkedin开源的一个批量工作流调度器,一个工作流内,多个作业可以按照特定的顺序执行,并且提供可视化Web界面。
在没有Azkaban的情况下,我们也可以做到任务调度,最基础的就是crontab+shell的形式。Azkaban对于调度任务的管理,以及各任务之间的依赖关系,进行了平台化的封装,让我们在任务管理上更加便捷。

二、应用部署

1.前置需要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 编译环境
yum install -y git
yum install -y gcc-c++

# MySQL环境
需要有MySQL环境给到我们存储任务调度信息

# 源码包下载
wget https://github.com/azkaban/azkaban/archive/refs/tags/4.0.0.tar.gz
mv azkaban-4.0.0.tar.gz azkaban-4.0.0.tar.gz
tar -zxvf azkaban-4.0.0.tar.gz

# 编译
wget https://services.gradle.org/distributions/gradle-4.6-all.zip
vi gradle-wrapper.properties
#distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
distributionUrl=gradle-4.6-all.zip
./gradlew build installDist -x test

# 4.0.0会报编译依赖下载失败
vi build.gradle
'com.linkedin.pegasus:generator',
'com.linkedin.pegasus:restli-server',
'com.linkedin.pegasus:restli-tools',
#修改这三个包的版本为:27.7.18

# 编译后生成的安装包路径
ll azkaban-exec-server/build/distributions/
ll azkaban-web-server/build/distributions/
ll azkaban-db/build/distributions/

2.two-server模式部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 解压
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban
tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban
tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban

# 在MySQL中执行azkaban-db中的create-all-sql-0.1.0-SNAPSHOT.sql
CREATE DATABASE azkaban;
USE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
SOURCE create-all-sql-0.1.0-SNAPSHOT.sql

# web-server设置
vi azkaban-web-server/conf/azkaban.properties
executor.port=12321 # 可以不修改,到时候可以看executor-server下的executor.port文件
default.timezone.id=Asia/Shanghai
jetty.port=8083
database.type=mysql
mysql.port=3306
mysql.host=IPADDRESS
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
# 需要注释掉机器资源检查,因为mac没有proc目录
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus

# 添加用户
vi azkaban-web-server/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>

# executor-server设置
vi azkaban-executor-server/conf/azkaban.properties
jetty.port=8083
default.timezone.id=Asia/Shanghai
azkaban.webserver.url=http://IP_ADDRESS:8083
mysql.port=3306
mysql.host=IPADDRESS
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

3.启动Azkaban

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd ./azkaban-executor-server
./bin/start-exec.sh

# 修改executor为active
use azkaban;
update azkaban.executors set active=1;

cd ./azkaban-web-server
./bin/start-web.sh

# WebUI
http://IPADDRESS:8083/

# 激活Executor
curl http://${executorHost}:${executorPort}/executor?action=activate

三、任务调度项目操作

1.简单使用

1
2
3
4
5
6
7
8
9
10
11
12
13
# 创建脚本
vi test.sh
#!/bin/bash
echo `date`"---JobA" >>/tmp/azkaban.log

# 创建Job文件
vi test.job
#job
type=command
command=sh /opt/test.sh

# 压缩为zip文件
# 在Azkaban上创建Project,上传Zip包

2.带有依赖的Job

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 创建Job文件夹
mkdir test_job

# 创建project文件
vi flow20.project
azkaban-flow-version: 2.0

# 创建flow任务流文件
vi basic.flow
nodes:
- name: jobA
type: command
config:
command: echo "JobA"

- name: jobB
type: command
config:
command: echo "JobB"

- name: jobC
type: command
config:
command: echo "JobC"
# jobC depends on jobA and jobB
dependsOn:
- jobA
- jobB

# 打成Zip包,上传Azkaban调度