Azkaban 使用问题及解决(一)
什么是Azkaban
Azkaban是一款基于Java编写的任务调度系统
任务调度:有四个任务脚A、B、C、D,其中任务A与任务B可以并行运行,然后任务C依赖任务A和任务B的运行结果,任务D依赖任务C的运行结果,此时整个过程可以等效为一个有向无环图,而给所有的任务运行定一个运行规则就可以理解为任务调度。
在任务简单时可以人为控制,但是当任务非常多,依赖复杂时,如果没有清晰的任务规划图,很容易在任务之间形成闭环从而出错,或者多个可并行的任务没有并行执行而浪费资源,这种时候就需要一个工作流调度器,Azkaban就是完成这种任务的。
Azkaban分为三个部分:
- mysql服务器:用于存储项目、日志或者执行计划之类的信息
- web服务器:使用Jetty对外提供web服务,使用户可以通过web页面方便管理
- executor服务器:负责具体的工作流的提交、执行
基础搭建
首先可从Azkaban官网上下载azkaban,初学时可以只下载
azkaban-web-server-2.5.0.tar.gz
,azkaban-executor-server-2.5.0.tar.gz
和azkaban-sql-script-2.5.0.tar.gz
三个组件压缩包即可,下载后进行解压
azkaban-sql-script-2.5.0.tar.gz
包中包含的都是Azkaban所需用到的所有数据库表的创建语句,在Azkaban 2.5.0版本的这个包中会有一个create-all.sql
文件,可以一次性创建好所有的数据库表。
azkaban-web-server-2.5.0.tar.gz
解压后在其conf/azkaban.properties
文件中可以进行web服务器数据库连接,web访问方式与端口,web访问账号密码,邮件等设置,各位根据自己的实际情况进行配置。
azkaban-executor-server-2.5.0.tar.gz
解压后在其conf/azkaban.properties
文件中可以进行执行服务器数据库连接,执行服务器线程数等设置。
在这些都设置好以后,浏览器访问对应IP与端口,即可进入Azkaban的web界面了。此时Azkaban的基础搭建基本完成。
了解各个元素及其关系
Azkaban界面中的主要元素有三个,分别是project、job与flow
project可以理解为某个项目,其项目中包含了许多需要执行的任务,即为job,各个job之间形成依赖关系,便组成了工作流flow
创建工作 job 与创建工作流 flow
在Azkaban系统的web界面中有创建project的交互,可以通过界面创建一个project,但是Azkaban没有创建job与flow的界面,这一点很讨厌。于是需要编写以.job
为扩展名的文件然后上传,才能在系统中形成job任务。
创建job
首先,需要创建以.job
为扩展名的文件,一个文件即代表一个任务。
所有的job都需要一个知道他们如何去执行的type。一般的,有这样四种job类型:Java、command、javaprocess和pig。
本文以type=command为例
其次在这个文件中添加这个任务所需的参数与参数值,
必须的参数有type
与command
例如
type=command
command=echo 'jobs start'
retries
--> 任务失败时自动重启的次数retry.backoff
--> 每一次任务尝试重启时之间等待的毫秒数working.dir
--> 可以重新指定任务执行的工作目录,默认为目前正在运行的任务的工作目录failure.emails
--> 任务失败时的邮件提醒设置,以逗号分隔多个邮箱success.emails
--> 任务成功时的邮件提醒设置,以逗号分隔多个邮箱notify.emails
--> 任务无论失败还是成功都邮件提醒设置,以逗号分隔多个邮箱dependencies
--> 定义该文件依赖的文件,值为被依赖文件的文件名,多个目标以逗号分隔,不加扩展名保存为
start.job
文件即创建好了一个jobAzkaban每个project中只能上传一个.zip文件
创建工作流flow
定义好所有的参数后即为定义好了一个job,如果添加了dependencies
参数即形成了工作流flow
以开头的任务流为例:
#start.job
type=command
command=echo "jobs start"
#A.job
type=command
command=echo "This A job"
dependencies=start
#B.job
type=command
command=echo "This B job"
dependencies=start
#C.job
type=command
command=echo "This C job"
dependencies=A,B
#D.job
type=command
command=echo "This D job"
dependencies=C
保存好5个文件后,将5文件打包成zip,然后在界面中进行上传,就会将这几个job上传到了系统中,最终呈现
从而一个工作流flow建好。
注意,想多个工作流flow并到一张图中,必须多个工作流flow有一个公共的结束job文件
创建子工作流subflow及其作用
Azkaban可以给每一个flow设定定时调度,这样就可以等到特定时间运行,然而,这样依旧不能满足一些需求
例如:
一个整个平台的任务调度中,大部分的job任务是根据依赖依次进行,但是有某些个job则依然需要自己的运行设定时间,即上一个job完成后需要等待,不能立即执行下一个job,但是Azkaban给job任务单独设定时后,会覆盖整个任务流flow的设置,所以此时需要引进子任务流subflow
子任务流的创建需要一个job文件,其参数形式为
type= xxx
flow.name= xxx
dependencies= xxx
注意
子流文件的参数设置需要遵循:
- flow.name为设定的子流subflow的结束job文件的文件名
- 子流内部的起始文件不存在依赖 ,其依赖关系在type=flow这个文件中设定
- 子流后面的文件的依赖则为type=flow这个job文件的文件名
所以上面这个例子中
添加一个文件:
#subflow.job
type=flow
flow.name=C
dependencies=start
相应修改文件:
#A.job
type=command
command=echo "This A job"
#B.job
type=command
command=echo "This B job"
#D.job
type=command
command=echo "This D job"
dependencies=subflow
此时工作流会变为
这样在这个project中,就可以分别对两个流进行调度的设定,并且主流中的依赖会等待子流的运行,总体任务调度图也会非常的清晰
邮件提醒设置
Azkaban自带有邮件提醒功能,在web服务器的conf/azkaban.properties
文件中,有以下字段
# mail settings
mail.host=
mail.sender=
mail.user=
mail.password=
job.failure.email=
job.success.email=
job.notify.email=
failure.emails
,success.emails
,notify.emails
三个参数,但是这三个属性不是直接加在.job
文件中,而是需要在所有.job
文件的根目录下创建一个以.properties
为扩展名的文件例如:
# system.properties
success.emails=xxx@xx.com
failure.emails=xxx@xx.com
一些其他需要全局作用的参数也可以添加在这个文件中,此属性文件会作用于全局job文件,一起打包上传即可。这样就可以实现任务成功或失败时的邮件提醒。
最后
Azkaban还可以自行开发插件,不过这个系统依然有一些bug,如果后续有需求则需要慢慢修补了。
Azkaban 使用问题及解决(一)的更多相关文章
- Azkaban 使用问题及解决
什么是Azkaban Azkaban是一款基于Java编写的任务调度系统 任务调度:有四个任务脚A.B.C.D,其中任务A与任务B可以并行运行,然后任务C依赖任务A和任务B的运行结果,任务D依赖任务C ...
- 大数据入门第十二天——azkaban入门
一.概述 1.azkaban是什么 通过官方文档:https://azkaban.github.io/ Azkaban is a batch workflow job scheduler create ...
- 初识Azkaban
先说下hadoop 内置工作流的不足 (1)支持job单一 (2)硬编码 (3)无可视化 (4)无调度机制 (5)无容错机制 在这种情况下Azkaban就出现了 1)Azkaban是什么 Azkaba ...
- Hadoop - Azkaban 作业调度
1.概述 在调度 Hadoop 的相关作业时,有以下几种方式: 基于 Linux 系统级别的 Crontab. Java 应用级别的 Quartz. 第三方的调度系统. 自行开发 Hadoop 应用调 ...
- hadoop工作流引擎之azkaban [转]
介绍 Azkaban是twitter出的一个任务调度系统,操作比Oozie要简单很多而且非常直观,提供的功能比较简单.Azkaban以Flow为执行单元进行定时调度,Flow就是预定义好的由一个或多个 ...
- Oozie和Azkaban的技术选型和对比
1 两种调度工具功能对比图 下面的表格对上述2种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在区别 特性 ...
- hadoop工作流引擎之azkaban
Azkaban是twitter出的一个任务调度系统,操作比Oozie要简单很多而且非常直观,提供的功能比较简单.Azkaban以Flow为执行单元进行定时调度,Flow就是预定义好的由一个或多个可存在 ...
- 工作流调度器azkaban(以及各种工作流调度器比对)
1:工作流调度系统的作用: (1):一个完整的数据分析系统通常都是由大量任务单元组成:比如,shell脚本程序,java程序,mapreduce程序.hive脚本等:(2):各任务单元之间存在时间先后 ...
- azkaban报错记录
问题信息:Failed to build job executor for job o2o_get_file_ftp1Job type 'command ' is unrecognized. Coul ...
随机推荐
- 浏览器兼容性汇总--CSS篇
目录 CSS篇 1. cursor:hand VS cursor:pointer 2. innerText在IE中能正常工作,但在FireFox中却不行 3. ...
- JPype1使用总结
目的:使用Locust+Python压测账号资料接口,使用JPype调用java代码,缩短压测脚本编写 前提条件:进行性能压测过程中,需要压测账号相关接口,由于账号相关接口设计到加密解密,用Pytho ...
- 关闭Azure虚拟机
Press the Windows key, and then in the Start page, located at the bottom-left, click the Power butto ...
- python 将汉字转换为拼音
xpinyin提供把汉字转为汉语拼音的功能. 安装此模块 pip install xpinyin简单用例: from xpinyin import Pinyin pin = Pinyin() test ...
- jmeter 报错Error in NonGUIDriver java.lang.IllegalArgumentException: Report generation requires csv output format, check 'jmeter.save.saveservice.output_format' property
设置jmeter报个的时候报下面错 只要细心看问题就是把它jmeter.save.saveservice.output_format'的格式改为csv就对 这个属性是在jmeter.propertie ...
- window10单机安装storm集群
适合范围:storm自由开源的分布式实时计算系统,擅长处理海量数据.适合处理实时数据而不是批处理. 安装前的准备 1.安装zookeeper ①下载zookeeperhttps://zookeeper ...
- SSM面试题
一.Spring面试题 1.Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用来管理Bean的生命周期和框架集成. 两大核心: 1.IOC/DI(控制反转/依赖注入 ...
- 如何使用 Pylint 来规范 Python 代码风格
如何使用 Pylint 来规范 Python 代码风格 转载自https://www.ibm.com/developerworks/cn/linux/l-cn-pylint/ Pylint 是什么 ...
- PHP7 MongDB 安装与使用
我们使用 pecl 命令来安装: /usr/local/php7/bin/pecl install mongodb 执行成功后,会输出以下结果: …… Build process completed ...
- 【译著】Code First :使用Entity. Framework编程(5)
第五章 对数据库映射使用默认规则与配置 到目前为止我们已经领略了Code First的默认规则与配置对属性.类间关系的影响.在这两个领域内,Code First不仅影响模型也影响数据库.在这一章,你将 ...