Azkaban
为什么要有Azkaban?
在数据业务场景,对于数据的处理往往是分阶段处理,而不同的阶段可能采用了不同的技术框架去完成这个业务需求,且可能在不同的阶段要干不同的事。
炒饭(锅) à 吃饭(碗) à 筷子(动手)
要吃饭就要等炒饭先用锅炒好,要用筷子动手吃饭就要等碗里装了饭,这是一个流水线式的过程,如果用设定时间的方式,到了什么时候就拿完去装饭,但如果今天兼职的人特别多,那么炒的饭必然就多了,时间也长了,但是设定时间到了,还没炒好,可是有一堆人挤在厨房喊要饭,问题就出现了。
于是有的人会想,如果有一个监督人帮我去这个监控、通知、控制好整个流程,那样多好啊,厨房就不会给天天催了,也不会发生拥挤的情况。
小结:一个完整的数据分析系统通常是由大量的任务单元组成,Shell脚本、Java程序、MapReduce程序、Hive脚本等等,各个任务单元之间存在时间先后及前后依赖关系。
为了很好的组织这样的复杂执行计划,需要一个工作流调度系统来调用执行。
简单的工作流调度:Liunx的crontab来定义
复杂的工作流调度:Oozie、Azakaban等。。。
主流几款工作流调度框架
特性HamakeOozieAzkabanCascading
工作流描述语言XMLXML (xPDL based)text file with key/value pairsJava API
依赖机制data-drivenexplicitexplicitexplicit
是否要web容器NoYesYesNo
进度跟踪console/log messagesweb pageweb pageJava API
Hadoop job调度支持noyesyesyes
运行模式command line utilitydaemondaemonAPI
Pig支持yesyesyesyes
事件通知nononoyes
需要安装noyesyesno
支持的hadoop版本0.18+0.20+currently unknown0.18+
重试支持noworkflownode evelyesyes
运行任意命令yesyesyesyes
Amazon EMR支持yesnocurrently unknownyes
什么是Azkaban?
Azkaban是Linkedin开源的一个批量工作流任务调度器,用于在一个工作流内以特定的顺序运行一组工作和流程。
Azkaban定义了以Key-Value的文件格式来建立任务之间的依赖关系,并提供了一个易于使用的web用户界面维护和跟踪工作流任务。
功能特点
Web用户界面
简单的上传工作流
简单的设置任务关系
调度工作流
认证/授权(授权)
能够杀死并重启工作流
模块化和可拔插的插件机制
项目工作区
工作流和任务的日志记录和审计
内置任务类型支持command和java
……
运行方式
solo
server mode(executor
server和web server部署在同一台节点)
multi
server mode(executor
server和web server可以部署在不同的节点)
案例
hello.job
$ vi hello.job
# hello.job
type=command
command=echo ‘hello’
world.sh
$ vi world.sh
#!/bin/bash
echo ‘world’
world.job
$ vi world.job
# world.job
type=command
dependencies=hello
command=sh world.sh
mr.job
$ vi mr.job
# mr.job
type=command
dependencies=world
command=/opt/module/hadoop-2.5.0-cdh5.3.6/bin/hadoopjar hadoop-mapreduce-examples-2.7.2.jar wordcount /user/creeper /azkout
打包(zip) à 上传、执行
使用注意事项
1.时区
2.必须用Https访问,需要配置SSL