Azkaban简介

目录

 

一、Azkaban概论

1.1  Azkaban是什么?

1.2 为什么需要工作流调度系统

1.3 Azkaban由三个关键组件构成

1.4 常见工作流调度系统

1.5 Azkaban与Oozie对比

二、 Azkaban入门

2.1 集群模式安装

2.1.1 上传tar包

2.1.2 配置MySQL

2.1.3 配置Executor Server

2.1.4 配置Web Server

2.2 Work Flow案例实操

2.2.1 HelloWorld案例

2.2.1 自动失败重试案例


一、Azkaban概论

1.1  Azkaban是什么?

1)Azkaban是由Linkedin公司推出的一个批量工作流任务调度器

2)主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式

3)通过配置中的dependencies 来设置依赖关系,这个依赖关系必须是无环的,否则会被视为无效的工作流。

4)Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

1.2 为什么需要工作流调度系统

1)一个完整的数据分析系统通常都是由大量任务单元组成:

Shell脚本程序,Java程序,MapReduce程序、Hive脚本等

2)各任务单元之间存在时间先后及前后依赖关系

3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;

1.3 Azkaban由三个关键组件构成

1、关系型数据库(MySQL): 存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等,AzkabanWebServerAzkabanExecutorServer都需要访问数据库

2、AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者,对外提供web服务,使用户可以通过web页面管理。职责包括项目管理、权限授权、任务调度、监控executor

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

 

1.4 常见工作流调度系统

1)简单的任务调度:直接使用Linux的Crontab来定义;

2)复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如Ooize、Azkaban、 Airflow、DolphinScheduler等。

1.5 Azkaban与Oozie对比

对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,Ooize相比Azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器Azkaban是很不错的候选对象。

特性

Hamake

Oozie

Azkaban

Cascading

工作流描述语言

XML

XML (xPDL based)

text file with key/value pairs

Java API

依赖机制

data-driven

explicit

explicit

explicit

是否要web容器

No

Yes

Yes

No

进度跟踪

console/log messages

web page

web page

Java API

Hadoop job调度支持

no

yes

yes

yes

运行模式

command line utility

daemon

daemon

API

Pig支持

yes

yes

yes

yes

事件通知

no

no

no

yes

需要安装

no

yes

yes

no

支持的hadoop版本

0.18+

0.20+

currently unknown

0.18+

重试支持

no

workflownode evel

yes

yes

运行任意命令

yes

yes

yes

yes

Amazon EMR支持

yes

no

currently unknown

yes

在这里插入图片描述

二、 Azkaban入门

2.1 集群模式安装

2.1.1 上传tar包

1)将azkaban-db-3.84.4.tar.gz,azkaban-exec-server-3.84.4.tar.gz,azkaban-web-server-3.84.4.tar.gz上传到hadoop102的/opt/software路径

[@hadoop102 software]$ ll

总用量 35572

-rw-r--r--. 1  6433 4月  18 17:24 azkaban-db-3.84.4.tar.gz

-rw-r--r--. 1 16175002 4月  18 17:26 azkaban-exec-server-3.84.4.tar.gz

-rw-r--r--. 1  20239974 4月  18 17:26 azkaban-web-server-3.84.4.tar.gz

2)新建/opt/module/azkaban目录,并将所有tar包解压到这个目录下

[@hadoop102 software]$ mkdir /opt/module/azkaban

3)解压azkaban-db-3.84.4.tar.gz、 azkaban-exec-server-3.84.4.tar.gz和azkaban-web-server-3.84.4.tar.gz到/opt/module/azkaban目录下

[@hadoop102 software]$ tar -zxvf azkaban-db-3.84.4.tar.gz -C /opt/module/azkaban/

[@hadoop102 software]$ tar -zxvf azkaban-exec-server-3.84.4.tar.gz -C /opt/module/azkaban/

[@hadoop102 software]$ tar -zxvf azkaban-web-server-3.84.4.tar.gz -C /opt/module/azkaban/

4)进入到/opt/module/azkaban目录,依次修改名称

[@hadoop102 azkaban]$ mv azkaban-exec-server-3.84.4/ azkaban-exec

[@hadoop102 azkaban]$ mv azkaban-web-server-3.84.4/ azkaban-web

2.1.2 配置MySQL

1)正常安装MySQL

2)启动MySQL

[@hadoop102 azkaban]$ mysql -uroot -p000000

3)登陆MySQL,创建Azkaban数据库

mysql> create database azkaban;

4)创建azkaban用户并赋予权限

设置密码有效长度4位及以上

mysql> set global validate_password_length=4;

设置密码策略最低级别

mysql> set global validate_password_policy=0;

创建Azkaban用户,任何主机都可以访问Azkaban,密码是000000

mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY '000000';

赋予Azkaban用户增删改查权限

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;

5)创建Azkaban表,完成后退出MySQL

mysql> use azkaban;

mysql> source /opt/module/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql

mysql> quit;

6)更改MySQL包大小;防止Azkaban连接MySQL阻塞

[@hadoop102 software]$ sudo vim /etc/my.cnf

在[mysqld]下面加一行max_allowed_packet=1024M

[mysqld]

max_allowed_packet=1024M

8)重启MySQL

[@hadoop102 software]$ sudo systemctl restart mysqld

2.1.3 配置Executor Server

Azkaban Executor Server处理工作流和作业的实际执行。

1)编辑azkaban.properties

[@hadoop102 azkaban]$ vim /opt/module/azkaban/azkaban-exec/conf/azkaban.properties


#...

default.timezone.id=Asia/Shanghai

#...

azkaban.webserver.url=http://hadoop102:8081



executor.port=12321

#...

database.type=mysql

mysql.port=3306

mysql.host=hadoop102

mysql.database=azkaban

mysql.user=azkaban

mysql.password=000000

mysql.numconnections=100

在最后添加

executor.metric.reports=true

executor.metric.milisecinterval.default=60000

2)同步azkaban-exec到所有节点

[@hadoop102 azkaban]$ xsync /opt/module/azkaban/azkaban-exec

3)必须进入到/opt/module/azkaban/azkaban-exec路径,分别在三台机器上,启动executor server

[@hadoop102 azkaban-exec]$ bin/start-exec.sh

[@hadoop103 azkaban-exec]$ bin/start-exec.sh

[@hadoop104 azkaban-exec]$ bin/start-exec.sh

注意:如果在/opt/module/azkaban/azkaban-exec目录下出现executor.port文件,说明启动成功

4)下面激活executor,需要

[@hadoop102 azkaban-exec]$ curl -G "hadoop102:$(<./executor.port)/executor?action=activate" && echo



[@hadoop103 azkaban-exec]$ curl -G "hadoop103:$(<./executor.port)/executor?action=activate" && echo



[@hadoop104 azkaban-exec]$ curl -G "hadoop104:$(<./executor.port)/executor?action=activate" && echo

如果三台机器都出现如下提示,则表示激活成功

{"status":"success"}

2.1.4 配置Web Server

Azkaban Web Server处理项目管理,身份验证,计划和执行触发。

1)编辑azkaban.properties

[@hadoop102 azkaban]$ vim /opt/module/azkaban/azkaban-web/conf/azkaban.properties
修改如下属性

...

default.timezone.id=Asia/Shanghai

...

database.type=mysql

mysql.port=3306

mysql.host=hadoop102

mysql.database=azkaban

mysql.user=azkaban

mysql.password=000000

mysql.numconnections=100

...

azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus

说明:

#StaticRemainingFlowSize:正在排队的任务数;

#CpuStatus:CPU占用情况

#MinimumFreeMemory:内存占用情况。测试环境,必须将MinimumFreeMemory删除掉,否则它会认为集群资源不够,不执行。

2)修改azkaban-users.xml文件,添加Mark用户

[@hadoop102 azkaban-web]$ vim /opt/module/azkaban/azkaban-web/conf/azkaban-users.xml



<azkaban-users>

  <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>

  <user password="metrics" roles="metrics" username="metrics"/>

  <user password="Mark" roles="metrics,admin" username="Mark"/>



  <role name="admin" permissions="ADMIN"/>

  <role name="metrics" permissions="METRICS"/>

</azkaban-users>

3)必须进入到hadoop102的/opt/module/azkaban/azkaban-web路径,启动web server

[@hadoop102 azkaban-web]$ bin/start-web.sh

4)访问http://hadoop102:8081,并用Mark用户登陆

2.2 Work Flow案例实操

2.2.1 HelloWorld案例

1)在windows环境,新建azkaban.project文件,编辑内容如下

azkaban-flow-version: 2.0

注意:该文件作用,是采用新的Flow-API方式解析flow文件。

2)新建basic.flow文件,内容如下

nodes:

  - name: jobA

    type: command

    config:

      command: echo "Hello World"

(1)Name:job名称

(2)Type:job类型。command表示你要执行作业的方式为命令

(3)Config:job配置

3)将azkaban.project、basic.flow文件压缩到一个zip文件,文件名称必须是英文。

4)在WebServer新建项目:http://hadoop102:8081/index

5)给项目名称命名和添加项目描述

6)first.zip文件上传

 

7)选择上传的文件

 

8)执行任务流

 

 

 

 

 

 

 

 9)在日志中,查看运行结果

 

2.2.1 自动失败重试案例

需求:如果执行任务失败,需要重试3次,重试的时间间隔10000ms

具体步骤:

1)编译配置流

nodes:

  - name: JobA

    type: command

    config:

      command: sh /not_exists.sh

      retries: 3

      retry.backoff: 10000

参数说明:

retries:重试次数

retry.backoff:重试的时间间隔

2)将修改后的basic.flow和azkaban.project压缩成four.zip文件

3)重复2.2.1节HelloWorld后续步骤。

4)执行并观察到一次失败+三次重试

5)也可以点击上图中的Log,在任务日志中看到,总共执行了4次。

6)也可以在Flow全局配置中添加任务失败重试配置,此时重试配置会应用到所有Job。

案例如下:

config:

  retries: 3

  retry.backoff: 10000

nodes:

  - name: JobA

    type: command

    config:

      command: sh /not_exists.sh

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值