azkaban调研

架构

  • 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开发,代码结构清晰,易于二次开发
  • 支持重试,告警

劣势

  1. web server存在单点故障风险
  2. 任务需要手动编写脚本创建,并打包成zip包上传
  3. 任务数量过大时普遍反应存在卡死,可能就是由于web server单点导致的

    参考

    https://blog.csdn.net/clypm/article/details/79076801

你可能感兴趣的:(java)