Azkaban简介

Azkaban简介一 Azkaban 概论 1 1Azkaban 是什么 1 Azkaban 是由 Linkedin 公司推出的一个批量工作流任务调度器 2 主要用于在一个工作流内以一个特定的顺序运行一组工作和流程 它的配置是通过简单的 key value 对的方式 3 通过配置中的 dependencies 来设置依赖关系 这个依赖关系必须是无环的 否则会被视为无效的工作流 4 Azkaban 使用 job 配置文件建立任务之间的依赖关系 并提供一个易于使用的 web 用户界面维护和跟踪你的工作流 1 2 为什么需要工作流调度

目录

 

一、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)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;

Azkaban简介

1.3 Azkaban由三个关键组件构成

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

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

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

Azkaban简介

 

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  4月  18 17:26 azkaban-exec-server-3.84.4.tar.gz -rw-r--r--. 1  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

Azkaban简介

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

Azkaban简介

6)first.zip文件上传

 

Azkaban简介

7)选择上传的文件

 

Azkaban简介

8)执行任务流

 

Azkaban简介

 

 

 

 

 

 

Azkaban简介

Azkaban简介

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

Azkaban简介

Azkaban简介

 

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后续步骤。

Azkaban简介

Azkaban简介

Azkaban简介

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

Azkaban简介

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

Azkaban简介

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

案例如下:

config:   retries: 3   retry.backoff: 10000 nodes:   - name: JobA     type: command     config:       command: sh /not_exists.sh

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233385.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring事务的默认隔离级别_事务隔离级别有哪些

    spring事务的默认隔离级别_事务隔离级别有哪些目录1、前言2、验证结论3、总结1、前言事务的四个隔离级别想必大家都已经清楚,但是在学习Spring的时候,我们发现Spring自己也有四个隔离级别(加上默认的是五个)。那么问题来了,当Spring设置的隔离级别和我们在数据库设置的隔离级别不一致时,哪个会生效?先抛出结论:Spring设置的隔离级别会生效2、验证结论要验证结论很简单,我们只需要在spring事务注解上面配置不同的隔离级别就行了:DAO层实现类的两个方法pay方法是模拟事务A先查询一次数据,然后休眠两秒再查询一次数据

    2025年11月11日
    4
  • vue路由传参的两种方式的区别_vue路由跳转获取参数

    vue路由传参的两种方式的区别_vue路由跳转获取参数vue路由传参的两种方式

    2025年5月23日
    4
  • 用旭日图展示数据的三种方法是_旭日大数据

    用旭日图展示数据的三种方法是_旭日大数据本文介绍了用旭日图展示数据的三种方法,供大家学习了解。

    2022年9月26日
    4
  • 关于VS中的sln文件[通俗易懂]

    关于VS中的sln文件[通俗易懂]sln文件我们在应用VC6以前,发现的是dsp和.dsw文件,打开dsw文件可以打开整个工程VS.net2002以后是.vcproj和.sln.sln对应以前的.dsw.vcproj对应以前的.dspvcproj是工程文件,sln是解决方案文件。一个解决方案里面可以包含多个工程。打开vcproj文件编译不了可能是因为这个工程里面用到了同一个解决方案中其它工程的东西。Vi

    2022年4月30日
    67
  • SQL SERVER拼接字符串(字符串中有变量)

    SQL SERVER拼接字符串(字符串中有变量)一、拼接字符串(整个字符串不分割)步骤:  1、首先在字符串的前后加单引号;  2、字符串中的变量以’’’+@para+’’’在字符串中表示;  3、若在执行时存在类型转换错误,则应用相应的类型转换函数,对变量进行类型转换(如cast()函数)。示例一:包含SQL拼接字符串的存储过程:CreateProcedureTest@TestIDintAsDeclare@sn…

    2022年6月17日
    396
  • pytest运行_python压测

    pytest运行_python压测前言pytest运行完用例之后会生成一个.pytest_cache的缓存文件夹,用于记录用例的ids和上一次失败的用例。方便我们在运行用例的时候加上–lf和–ff参数,快速运行上一

    2022年7月29日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号