Azkaban
1.工作流
工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。
工作流解决的主要问题是:为了实现某个业务目标,利用计算机软件在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
一个完整的数据分析系统通常都是有多个前后依赖的模块组合构成的:数据采集、数据预处理、数据分析、数据展示等。各个模块单元之间存在事件先后依赖关系,且存在着周期性重复。
2.工作流调度工具之间对比
特性 | 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 |
3.Azkaban 调度器
Azkaban 是由 linkedin(领英)公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban 使用 job 配置文件建立任务之间的依赖关系,并提供一个易于使用的 web 用户界面维护和跟踪你的工作流。
4.Azkaban 功能特点
-
提供功能清晰,简单易用的 Web UI 界面
-
提供 job 配置文件快速建立任务和任务之间的依赖关系
-
提供模块化和可插拔的插件机制,原生支持 command、Java、Hive、Pig、Hadoop
-
基于 Java 开发,代码结构清晰,易于二次开发
5.Azkaban 原理架构
-
mysql 服务器
-
存储元数据:项目名称、项目描述、项目权限、任务状态、SLA 规则等
-
-
AzkabanWebServer
-
对外提供 web 服务,使用户可以通过 web 页面管理。
-
职责包括项目管理、权限授权、任务调度、监控 executor
-
-
AzkabanExecutorServer
-
负责具体的工作流的提交、执行
-
6.Azkaban 三种部署模式
-
solo-server mode
-
该模式中 webServer 和 executorServer 运行在同一个进程中,进程名是 AzkabanSingleServer。 使用自带的 H2 数据库。 这种模式包含 Azkaban 的所有特性,但一般用来学习和测试。
-
-
two-server mode
-
该模式使用 MySQL 数据库, Web Server 和 Executor Server 运行在不同的进程中
-
-
multiple-executor mode
-
该模式使用 MySQL 数据库, Web Server 和 Executor Server 运行在不同的机器中。 且有多个 Executor Server。 该模式适用于大规模应用。
-
Azkaban 使用
1. shell command 调度
1.1 创建 job 描述文件
vi command.job
#command.job
type=command
command=echo 'hello'
1.2 将 job 资源文件打包成 zip 文件
zip command.job
1.3 通过 azkaban 的 web 管理平台创建 project 并上传 job 压缩包
创建 project
上传 zip 包
启动执行该 job
2. job 依赖调度
2.1 创建有依赖关系的多个 job 描述
第一个 job: foo.job
# foo.job
type=command
command=echo foo
第二个 job:bar.job 依赖 foo.job
# bar.job
type=command
dependencies=foo
command=echo bar
2.2 将所有 job 资源文件打包到一个 zip 包中
2.3 在 azkaban 的 web 管理界面创建工程并上传 zip 包
2.4 启动工作流 flow
3. HDFS 任务调度
4. MAPREDUCE 任务调度
5. HIVE 脚本任务调度
6. 定时任务调度