Azkaban是被LinkedIn上实现的,目的是解决Hadoop作业依赖的问题。从ETL到数据分析产品,我们有很多job需要按一定的顺序执行。
  最初是一个单一的服务器解决方案,随着Hadoop用户数量的增加,Azkaban已经发展成为一个更加健壮的解决方案。

  三个组成部分:

  •     关系型数据库--Relational Database (MySQL)
  •     web服务器--AzkabanWebServer
  •     执行服务器--AzkabanExecutorServer

azkaban client 提交pyspark azkaban中文官方文档_服务器


关系型数据库:


azkaban使用MySQL存储其大部分状态。AzkabanWebServer和AzkabanExecutorServer都访问数据库。


AzkabanWebServer是如何使用数据库的?


  • 项目管理——项目,项目的权限以及上传的文件。
  •  执行流状态——跟踪执行流,执行程序运行它们。
  •  以前的流/作业——通过以前的作业和流的执行来搜索,以及访问他们的日志文件。
  •  调度程序-跟踪调度的工作状态。
  •  SLA -保留所有SLA规则。

AzkabanWebServer是如何使用数据库的?

  • 访问项目——从数据库中检索项目文件。
  • 执行流/作业-检索和更新流的数据并执行。
  • 日志-存储作业的输出日志,并流到db中。
  • Interflow依赖——如果流在不同的执行器上运行,它将从数据库中获取状态。

我们没有理由不选择mysql,因为mysql是应用非常广泛的数据库。

AzkabanWebServer:

AzkabanWebServer是所有阿兹卡班的主要管理者。它处理项目管理、身份验证、调度器和执行监视。它还充当web用户界面。
azkaban使用很简单。azkaban使用*.job key-value文件用于定义工作流程中的单个任务,以及定义作业的依赖关系链的_dependencies_属性。这些作业文件和相关代码可以归档到*.zip中。通过Azkaban UI或curl或者web服务器上传。

AzkabanExecutorServer:
以前版本的Azkaban在一个服务器上有AzkabanWebServer和AzkabanExecutorServer功能。此后,Executor被分离到它自己的服务器中。拆分这些服务有几个原因:如果一个失败了,我们很快就可以扩展执行的数量,并在操作执行器上回滚。此外,我们还可以对Azkaban进行滚动升级,升级对用户的影响最小。随着azkaban的使用越来越多,我们发现升级变得越来越困难,因为一天中所有的时间都变成了“高峰”。