avatar

目录
Azkaban-任务调度

[TOC]

参考:

概述

什么是azkaban

批量工作流任务调度器,

Azkaban特点

1) 兼容任何版本的hadoop(oozie需要版本兼容)

2) 易于使用的Web用户界面(可操作、可修改)

3) 简单的工作流的上传

4) 方便设置任务之间的关系

5) 调度工作流

6) 模块化和可插拔的插件机制

7) 认证/授权(权限的工作)

8) 能够杀死并重新启动工作流(可以直接在页面kill重启)

9) 有关失败和成功的电子邮件提醒

总结:我比oozie优秀(- - ||)

Azkaban的架构

三个关键组件:

图片 1

1) AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者:用户登录认证、负责project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。

2) AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。

3) 关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。

流程:

屏幕快照 2019-10-28 下午5.44.22

Azkaban安装部署

安装Azkaban

shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 下载地址
http://azkaban.github.io/downloads.html

# 需要的包
azkaban-web-server-2.5.0.tar.gz
azkaban-executor-server-2.5.0.tar.gz
azkaban-sql-script-2.5.0.tar.gz

# 建目录
mkdir azkaban-2.5.0
cd azkaban-2.5.0/
# 解压
tar -zxvf /media/psf/centos_share/azkaban-executor-server-2.5.0.tar.gz -C /home/machine/apps/azkaban-2.5.0/
tar -zxvf /media/psf/centos_share/azkaban-web-server-2.5.0.tar.gz -C /home/machine/apps/azkaban-2.5.0/
tar -zxvf /media/psf/centos_share/azkaban-sql-script-2.5.0.tar.gz -C /home/machine/apps/azkaban-2.5.0/
# 该名
mv azkaban-executor-2.5.0/ executor
mv azkaban-web-2.5.0/ server

# azkaban脚本导入(在azkaban-sql-script-2.5.0.tar.gz里有个create-all-sql-2.5.0.sql)
create database azkaban;
# 切换数据库,执行脚本create-all-sql-2.5.0.sql

生成密钥对和证书

HTTPS和证书说明

主要是azkaban使用的是https协议,我虚拟机里的linux需要一些额外操作来支持https才行

HTTPS= HTTP+SSL/TLS

客户端请求服务器时,服务器会发个证书过来,如果证书安全,则认为服务器是安全的。

(ps: 自己生成的证书也是不安全的,安全的证书是需要走认证流程的…)


使用java的keytool工具来做

shell
1
2
3
4
5
6
cd server
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
# 密码写123456,然后一路回车,按y
# server下生成了一个 keystore
# 查看一下
keytool -keystore keystore --list

时间同步配置

和oozie那一样的,把机子修改到+0800

shell
1
2
3
4
5
6
7
# 查看机子的时区
date -R

# 修改
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 修改时区(立即生效)
timedatectl set-timezone Asia/Shanghai

Web服务器配置

shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cd conf/

# 修改azkaban.properties
web.resource.dir=/home/machine/apps/azkaban-2.5.0/server/web
default.timezone.id=Asia/Shanghai
user.manager.xml.file=/home/machine/apps/azkaban-2.5.0/server/conf/azkaban-users.xml
executor.global.properties=/home/machine/apps/azkaban-2.5.0/executor/conf/global.properties
#mysql相关
mysql.host=mxxcentos7
mysql.user=root
mysql.password=123456
#使用的是jetty服务器
jetty.keystore=/home/machine/apps/azkaban-2.5.0/server/keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=/home/machine/apps/azkaban-2.5.0/server/keystore
jetty.trustpassword=123456
#邮件通知(可以不配,国内支持163)


# 修改azkaban-users.xml
# 添加一个
<user username="admin" password="admin" roles="admin"/>

Executor服务器配置

shell
1
2
3
4
5
6
7
8
9
cd executor/conf/
# 修改azkaban.properties
default.timezone.id=Asia/Shanghai
executor.global.properties=/home/machine/apps/azkaban-2.5.0/executor/conf/global.properties
# mysql
mysql.host=mxxcentos7
mysql.database=azkaban
mysql.user=root
mysql.password=123456

启动executor & server服务器

shell
1
2
3
4
5
6
7
8
9
./executor/bin/azkaban-executor-start.sh
# 回车一下
./server/bin/azkaban-web-start.sh
# 回车一下

# 访问:https://mxxcentos7:8443
# 注意:是https,有个不安全提醒,goole浏览器下点击高级-继续前往就行了

# 登录输入admin就进入界面了

ps : 哇对比一下oozie那个简陋的反人类页面

常用案例

Azkaba内置的任务类型支持command、java

ps: hdfs、mapreduce、hive都可以写成command呀,和oozie不同,oozie是要整合大数据框架的,Azkaba只是单纯的调度

一个job是一个工作节点,多个job之间需要一个配置来形成工作流。这里只是一个单一job执行

注意:这个配置是用web上传的,所以下面的操作在本机上(不是linux服务器上)完成的

案例:单一job

shell
1
2
3
4
5
6
# 创建job描述文件 first.job(后缀必须.job)
#first.job
type=command
command=echo 'this is my first job'
# 将job资源文件打包成zip文件(只支持zip不要打其他的)
first.zip

接下来就是页面操作了

Code
1
2
3
4
5
6
7
8
9
10
11
点击Create Project
填一下 first/first

点upload,选刚才打包的first.zip,上传
上传好后,对应mysql里的project_files表已经有内容了

点Excute Flow
可以选(Schedule: 定时跑 Excute:立即执行)

绿了就成功了
Job List可以查日志

修改工作流程也可以页面操作

Code
1
2
3
4
5
6
7
8
9
10
11
12
Projects > first > 下拉点击first > Edit

改一下:
echo ${param}
提交

再执行一次,点Excute Flow

(Notification可以配置邮件发送)

点Flow Parameters
加一个 param / this is my azkaban,执行看看

案例:邮件通知配置

目前国内邮箱只推荐使用163

修改server/conf/azkaban.properties

shell
1
2
3
4
5
6
7
8
9
10
11
# 先关掉
./server/bin/azkaban-web-shutdown.sh

# azkaban.properties
mail.sender=hhdwwt@163.com
mail.host=smtp.163.com
mail.user=hhdwwt@163.com
# !!这里写的不是密码,是你的163邮箱第三方客户端授权码!!
mail.password=XXXXX

# 重启

配置job成功和失败的发送邮箱:

屏幕快照 2019-10-30 下午1.06.22

案例:多job工作流

创建4个job,并说明依赖关系

properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# first.job
type=command
command=echo 'first'

# second.job
type=command
command=echo 'second'
dependencies=first

# third.job
type=command
command=echo 'third'
dependencies=first

# forth.job
type=command
command=echo 'forth'
dependencies=second,third

然后把这四个job打包jobs.zip,上传执行看看。

流程:

屏幕快照 2019-10-29 下午6.48.01

执行情况

屏幕快照 2019-10-29 下午6.48.22

可以看到2、3是并行执行的。

看linux里边生成了2个东西:

executions:日志

projects:job文件

案例:java任务

写个类打成jar包

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package mxx.azkaban;
import java.io.FileOutputStream;
import java.io.IOException;

public class AzkabanTest {
public void run() throws IOException {
FileOutputStream fos = new FileOutputStream("/home/machine/apps/azkaban-2.5.0/output.txt");
fos.write("this is a java progress".getBytes());
fos.close();
}

public static void main(String[] args) throws IOException {
AzkabanTest azkabanTest = new AzkabanTest();
azkabanTest.run();
}
}

写job文件java.job

properties
1
2
3
type=javaprocess
java.class=mxx.azkaban.AzkabanTest
classpath=./azkaban-demo.jar

将 java.job 和 azkaban-demo.jar 打个 java.zip

界面上传一下,执行。

然后linux下output.txt已经生成了

案例:hdfs & mr & hive任务

这个就是个普通的command

1、运行mapreduce的wordcount

写mr.job

properties
1
2
type=command
command=/home/machine/apps/hadoop-2.6.0-cdh5.16.1/bin/hadoop jar /home/machine/apps/hadoop-2.6.0-cdh5.16.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.16.1.jar wordcount /wordcount.txt /output_1029_1

打包界面上传,执行

为什么azkaban日志有error,但还是成功执行了mr?

可能是个bug…但是不影响使用

…其他都是一样的,略

文章作者: Machine
文章链接: https://machine4869.gitee.io/2019/10/25/20191025135544362/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论