Azkaban是被LinkedIn上实现的,目的是解决Hadoop作业依赖的问题。从ETL到数据分析产品,我们有很多job需要按一定的顺序执行。
最初是一个单一的服务器解决方案,随着Hadoop用户数量的增加,Azkaban已经发展成为一个更加健壮的解决方案。
三个组成部分:
- 关系型数据库--Relational Database (MySQL)
- web服务器--AzkabanWebServer
- 执行服务器--AzkabanExecutorServer
关系型数据库:
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的使用越来越多,我们发现升级变得越来越困难,因为一天中所有的时间都变成了“高峰”。