Azkaban是在LinkedIn上实现的,用来解决Hadoop作业依赖的问题。我们的工作需要按顺序运行,从ETL工作到数据分析产品。
Azkaban最初是一个单一的服务器解决方案,随着多年来Hadoop用户数量的增加,它已经发展成为一个更健壮的解决方案。
Azkaban由三个关键部分组成:
Azkaban使用MySQL来存储它的大部分状态。AzkabanWebServer和AzkabanExecutorServer都访问数据库。
AzkabanWebServer 是如何访问数据库的?
web服务器使用数据库的原因如下:
AzkabanExecutorServer 用数据库来干啥?
选择MySQL的原因是它是一个广泛使用的数据库。我们希望实现与其他数据库的兼容性,尽管在历史上运行作业的搜索需求受益于关系数据存储。
AzkabanWebServer是阿兹卡班的主要管理器。它处理项目管理、身份验证、调度器和执行监视。它还充当web用户界面。
使用Azkaban很容易,Azkaban使用*.job键值属性文件定义工作流中的各个任务,_dependencies_属性定义作业的依赖链。这些作业文件和相关代码可以归档到一个*.zip文件中,并通过Azkaban UI或curl通过web服务器上传。
以前的Azkaban版本同时具有AzkabanWebServer和AzkabanExecutorServer的功能。后来,执行程序被分离到它自己的服务器中。拆分这些服务有几个原因:我们很快就可以扩展执行的数量,如果有一个失败,我们就可以使用操作执行器。同时,我们能够在对用户影响最小的情况下升级Azkaban。随着Azkaban的使用增加,我们发现升级Azkaban变得越来越困难,因为一天中的任何时候都变成了“高峰”。
在3.0版本中,我们提供了三种模式:独立的“单服务器”模式、较重的双服务器模式和分布式多执行器模式。下面将介绍这两种模式之间的区别。
在solo服务器模式下,DB嵌入H2, web服务器和executor服务器在同一个进程中运行。如果你只是想尝试一下,这应该是有用的。它也可以在小规模的用例中使用。
Download and Install Solo Server Package
Install Azkaban Plugins
两种服务器模式适用于更复杂的生产环境。它的DB应该由主-从设置的MySQL实例来支持。web服务器和executor服务器应该运行在不同的进程中,因此升级和维护不应该影响用户。
多执行器模式适用于最正式的生产环境。它的DB应该由主-从设置的MySQL实例来支持。理想情况下,web服务器和执行服务器应该运行在不同的主机上,这样升级和维护就不会影响用户。这种多主机设置为azkaban带来了健壮和可伸缩的方面。
下面是如何设置azkaban的说明。
Azkaban构建使用Gradle(使用gradlew (Gradle包装器)自动下载),需要Java 8或更高版本。
下面的命令运行在*nix平台上,比如Linux, OS X。
# Build Azkaban
./gradlew build
# Clean the build
./gradlew clean
# Build and install distributions
./gradlew installDist
# Run tests
./gradlew test
# Build without running tests
./gradlew build -x test
这些都是标准的gradle指令。请查看Gradle文档获取更多信息。
Gradle在项目目录中创建.tar.gz文件。如。
./azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz.
Untar using
tar -xvzf path/to/azkaban-*.tar.gz.
solo Server是azkaban的一个独立实例,也是最简单的入门工具。solo服务器有以下优点。
安装方法:
git clone https://github.com/azkaban/azkaban.git
cd azkaban; ./gradlew build installDist
cd azkaban-solo-server/build/install/azkaban-solo-server; bin/azkaban-solo-start.sh
bin/azkaban-solo-shutdown.sh
from within the azkaban-solo-server installation directorysolo-server安装应该包含以下目录。
Folder | Description |
---|---|
bin | The scripts to start/stop Azkaban jetty server |
conf | The configuration files for Azkaban solo server |
lib | The jar dependencies for Azkaban |
extlib | Additional jars that are added to extlib will be added to Azkaban's classpath |
plugins | the directory where plugins can be installed |
web | The web (css, javascript, image) files for Azkaban web server. |
在conf目录中,应该有三个文件:
azkaban.private.properties - 运行时参数
azkaban.properties - 使用运行时参数
global.properties - 作为共享属性传递给每个工作流和作业的全局静态属性。
azkaban-users.xml - 用于为身份验证添加用户和角色。如果XmLUserManager没有设置为使用该文件,则不使用该文件。
azkaban.properties是最主要的配置文件
阿兹卡班solo服务器默认不使用SSL。但是您可以在独立的web服务器上以相同的方式进行设置。这里是:
Azkaban web服务器可以使用SSL套接字连接器,这意味着密钥库必须是可用的。您可以按照这个链接提供的步骤进行调用([http://docs.codehaus.org/display/JETTY/How+to+configure+SSL](http://docs.codehaus.org/display/JETTY/How+to+configure+SSL)) 创建一个。创建密钥存储库文件后,必须向azkaban提供其位置和密码。azkaban.properties,应重写下列属性。
jetty.keystore=keystore
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password
下面就不写了,大家自己看吧:
https://azkaban.readthedocs.io/en/latest/index.html#