架构
- Azkaban Web Server 提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。
- Azkaban Executor Server 负责具体的工作流和任务的调度提交
MySQL用于保存项目、日志或者执行计划之类的信息
web界面
可以查看任务的dag图,任务执行历史和日志,创建任务的定时调度,手动杀死任务等
任务创建
Azkaban使用以.job为后缀名的键值属性文件来定义工作流中的各个任务,以及使用dependencies属性来定义作业间的依赖关系链。这些作业文件和关联的代码最终以*.zip的方式通过Azkaban UI上传到Web服务器上,并存储到mysql中
-- a.job
type=command
command=echo 'xxx'
-- b.job
type=command
dependencies=a
command=echo 'xxx'
执行流程
- Webserver根据内存中缓存的各Executor的资源状态(Webserver有一个线程会遍历各个active executor,去发送http请求获取其资源状态信息缓存到内存中),按照选择策略(包括executor资源状态、最近执行流个数等)选择一个executor下发作业流;
- executor判断是否设置作业粒度分配,如果未设置作业粒度分配,则在当前executor执行所有作业;如果设置了作业粒度分配,则当前节点会成为作业分配的决策者,即分配节点
- 被分配到作业的executor即成为执行节点,执行作业,然后更新数据库
部署
- solo server mode:最简单的模式,数据库内置的H2数据库,AzkabanWebServer和AzkabanExecutorServer都在一个进程中运行,任务量不大项目可以采用此模式。
- two server mode:数据库为MySQL,管理服务器和执行服务器在不同进程,这种模式下,AzkabanWebServer和AzkabanExecutorServer互不影响。
- multiple executor mode:该模式下,AzkabanWebServer和AzkabanExecutorServer运行在不同主机上,且AzkabanExecutorServer可以有多个
优势
- 对任务执行的监控,手动杀死/启动等功能集中到了web界面上
- 提供模块化的可插拔机制,原生支持command、java、hive、hadoop;告警也可以通过此扩展
- 基于java开发,代码结构清晰,易于二次开发
- 支持重试,告警
劣势
- web server存在单点故障风险
- 任务需要手动编写脚本创建,并打包成zip包上传
任务数量过大时普遍反应存在卡死,可能就是由于web server单点导致的
参考
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。