在3.0版本中,提供了三种模式:单服务模式,2个服务模式以及分布式多服务模式。以下描述了它们之间的差异。
在单服务模式
下
,数据库使用H2,并且web server 和 executor server 运行
在同一进程中
。此模式合适个人试用使用。它也可以用在小规模的使用案例。
在
2个 server 模式适用在较重
的生产环境。其数据库应该由MySQL实例,采用主从设置进行备份。WebServer 和 ExecutorServer应该在不同的进程中运行,使升级和维护不会影响用户。
多个 Executor 模式
为最重的生产环境。其数据库应该由MySQL实例,采用主从设置进行备份。WebServer和ExecutoerServer应该在不同的主机上运行,使升级和维护不会影响用户。这种多主机设置,让
阿兹卡班具有
强大的可扩展性。
下面是关于如何设置阿兹卡班了说明。
Building from Source
Azkaban 使用
Gradle, 需要 jdk 1.8。 用户不需要安装 gradle,项目里自带了.
Linux and Mac OS X
$ ./gradlew distTar
Windows
$ gradlew distTar
安装Azkaban solo服务
在 Azkaban 2.5有一个 solo-server 模式,可以在学习或者小规模和对安全要求不高环境中使用。
其特点是:
- 易于安装 - MySQL实例不是必要的。它封装H2作为其主要的持久性存储。
- 易于启动 - Web服务和 Executor服务都运行在同一进程中。
- 全功能 -它打包所有azkaban的功能。你可以按通用的方式使用它,也可以为它安装插件。
安装Solo服务器
软件包解压到一个目录下。提取后,应该有以下目录。
文件夹 | 描述 |
bin | 启动阿兹卡班服务的脚本 |
conf | 阿兹卡班的所有配置 |
lib | 阿兹卡班依赖的jar包 |
extlib | 添加到extlib 的 jar 包,会被添加到 Azkaban 的classpath |
plugins | 可在此目录安装插件 |
web | azkaban的Web 网站所需的(CSS,JavaScript,图像)文件。 |
在
conf
目录中,应该有三个文件:
azkaban.private.properties
- 阿兹卡班运行时使用的参数azkaban.properties
- 阿兹卡班运行时使用的参数global.properties
- 全局静态属性,在每一个工作流 及 job中被传递并共享。azkaban-users.xml中
- 用于添加用户和角色进行身份验证。使用此文件需要,设置 XmLUserManager 属性。
azkaban.properties
文件是主要的配置文件。
获取密钥库SSL(可选)
Azkaban solo server在默认情况下不使用SSL。但是也可以使用相同的方式,把它设置在一个独立的网络服务中。方法如下:
Azkaban web server 使用 SSL 的 socket 连接器,那就必须有一个可用的密钥存储。
查看
这个链接
创建一个
。
一旦密钥存储文件被创建,azkaban必须配置它的位置和密码。在
azkaban.properties
,下面的属性将会被覆盖。
jetty.keystore=密钥库
jetty.password=密码
jetty.keypassword=密码
jetty.truststore=密钥库
jetty.trustpassword=密码
建立的UserManager
azkaban 使用 UserManager 提供身份验证和管理用户角色。默认情况下,azkaban 使用
XmlUserManager
从_azkaban-users.xml_获
取用户名/密码及角色,可以在
azkaban.properties
文件查看
。
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
运行Web服务器
在文件
azkaban.properties
中,使用下面的属性配置jetty
。
jetty.maxThreads = 25
jetty.ssl.port = 8081
执行
bin/azkaban-solo-start.sh
开始solo-sefver。要停止,运行
bin/azkaban-solo-shutdown.sh
数据库设置
目前,Azkaban2只使用MySQL作为其数据存储
1.安装MySQL
2.设置数据库
创建一个数据库
。
#
名称可以自定义
mysql> CREATE DATABASE azkaban;
创建一个数据库用户
。例如:
#用户名可以自定义
mysql> CREATE USER ‘username'@'%'IDENTIFIED BY'password';
设置用户权限
。
#
给用户添加
INSERT,SELECT,UPDATE,DELETE
权限。
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON <database>.* to ‘<username>'@‘%' WITH GRANT OPTION;
配置packet size。MySQL默认
packet size
配置太低 。需要修改
max_allowed_packet
属性
,比如 1024M。
在Linux中,在
/etc/my.cnf
配置
。在
mysqld
后面,添加以下内容:
[mysqld]
...
max_allowed_packet=1024M
需要重启MySQL,可以运行...
$ sudo /sbin/service mysqld restart
3.创建Azkaban的表
可以在MySQL中运行每个表的创建语句来创建表。或者,简单的办法就运行
create-all-sql
脚本。以
update
开头的脚本可以忽略。
use azkaban;
source /home/cm/chenzhilei/azkaban-2.5.0/create-all-sql-2.5.0.sql
4.获取JDBC Connector jar包
Web server和 executor server
需要
这个jar
,需要放到它们/extlib目录下。
设置Azkaban Web Server
Azkaban Web Server 负责处理项目管理、认证、调度以及触发器。
安装Web Server
软件包解压到一个目录下。安装路径应该是从AzkabanExecutorServer不同。提取后,应该有以下目录:
文件夹 | 描述 |
bin | 启动azkaban jetty 服务的脚本 |
conf | 所有配置文件 |
lib | azkaban依赖的jar |
extlib | extlib中jar将被添加到azkaban的classpath |
plugins | 插件的安装目录 |
web | azkaban web server 网站所需文件(CSS,JavaScript,图像)。 |
在
conf
目录中,应该有三个文件
azkaban.properties
-运行时使用的参数global.properties
-全局静态属性,在 flow 和 job 中被被传递共享。azkaban-users.xml
-用于添加用户和进行角色身份验证。必须XmLUserManager
被设置为azkaban-users.xml
时该文件才被使用。
该
azkaban.properties
文件是主要的配置文件,azkaban 必须有此文件。
获取密钥库SSL
Azkaban web server 使用 SSL 的 socket 连接器,那就必须有一个可用的密钥存储。
您查看
这个链接
创建一个。
一旦密钥存储文件被创建,azkaban必须配置它的位置和密码。在
azkaban.properties
,下面的属性将会被覆盖。
jetty.keystore =密钥库 jetty.password =密码 jetty.keypassword =密码 jetty.truststore =密钥库 jetty.trustpassword =密码
设置DB
移动这个jar到
extlib
目录。所有外部的依赖都应添加到extlib目录。
配置 azkaban Web客户端的MySQL实例,需要将连接参数添加到azkaban.properties。
database.type = MySQL
mysql.port = 3306
mysql.host = localhost
mysql.database = azkaban
mysql.user = azkaban
mysql.password = azkaban
mysql.numconnections = 100
目前,MySQL是 azkaban 唯一支持的数据存储类型。所以
database.type
应该永远是
MySQL
。
建立UserManager
azkaban 使用
UserManager
提供身份验证和用户角色。
默认,azkaban使用
XmlUserManager
它从
azkaban-users.xml
文件
获取用户名/密码以及角色,
可以在
azkaban.properties
文件看到。
user.manager.class = azkaban.user.XmlUserManager
user.manager.xml.file = conf/azkaban-users.xml
运行Web Server
下面的属性
azkaban.properties
用于配置jetty。
jetty.maxThreads = 25
jetty.ssl.port = 8443
执行
bin/azkaban-web-start.sh
启动AzkabanWebServer。
要关闭AzkabanWebServer,运行
斌bin/azkaban-web-shutdown.sh
可以通过浏览器访问Web Server。
设置Azkaban Executor Server
azkaban-executor-server 处理工作流程和 job 的实际执行。
安装executor-server
解压
软件包
。安装路径应该与azkaban Web server 不同。提取后,应该有以下目录。
文件夹 | 描述 |
bin | 启动阿兹卡班jetty服务的脚本 |
conf | 所有配置文件 |
lib | azkaban依赖的jar |
extlib | extlib中jar将被添加到azkaban的classpath |
plugins | 插件安装的目录 |
在
conf
目录中,我们只需要配置
azkaban.properties
文件。
此文件是为主要的配置文件,azkaban executor必须有此配置文件。
设置DB
移动这个jar到
extlib
目录。所有外部的依赖都添加到extlib目录。
将需要的连接参数添加到azkaban.properties。
database.type = mysql
mysql.port = 3306
mysql.host = localhost
mysql.database = azkaban
mysql.user = azkaban
mysql.password = azkaban
mysql.numconnections = 100
目前,MySQL是在azkaban唯一支持的数据存储类型。所以
database.type
应该永远是
MySQL的
。
配置AzabanWebServer和AzkabanExecutorServer客户
executor server 需要设置一个端口,AzabanWebServer需要知道此端口。
以下属性需要在AzkabanExecutorServer的设置azkaban.properties。
#azkaban executor 的配置
executor.maxThreads = 50
executor.port = 12321
executor.flow.threads = 30
单 Executor 模式
默认
executor.port
被设置为12321。AzkabanWebServer 需要指向这个端口。
在AzkabanWebServer的
azkaban.properties文件中
进行
设置。
executor.port = 12321
多 Executor 模式
如果我们想在多 executor 模式下运行程序,那
我们需要有多个webserver 。azkaban.properties文件中必须有以下azkaban.use.multiple.executors 和 azkaban.executorselector.comparator.* 。请注意,在多executor模式下
azkaban.use.multiple.executors
并不荣幸。
azkaban.use.multiple.executors =true
azkaban.executorselector.filters = StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator = 1
azkaban.executorselector.comparator.Memory = 1
azkaban.executorselector.comparator.LastDispatched = 1
azkaban.executorselector.comparator.CpuUsage = 1
需要重启服务,才可以加载这些修改。
运行 Executor Server
执行
bin/azkaban-exec-start.sh
启动AzkabanExecutorServer。
要关闭AzkabanExecutorServer,运行
bin/azkaban-exec-shutdown.sh
配置多 Executor 模式
目前 Executor 管理 UI。 Executor 需要在数据库中进行配置。例如: -
insert into executors(host,port) values("EXECUTOR_PORT",EXECUTOR_PORT);
设置 Azkaban 插件
Azkaban 的非核心功能
被设计为
基于插件,这样做是为了
- 在不同的环境下,在不改变Azkaban 核心时,可以选择性地安装/升级
- 这让 Azkaban 在不同的系统上非常容易扩展。
眼下,azkaban 允许多种不同的插件。在 Web server 端,有
- 浏览器插件,可以自定义网页丰富Azkaban的功能。已知的一些实现包括HDFS文件系统浏览器,Reportal。
- 触发插件,可以自定义触发方式。
- 用户管理器插件,允许自定义用户身份验证方法。例如,在LinkedIn我们有基于LDAP的用户认证。
- 报警器插件,使用不同的报警方式给用户,除了基于电子邮件的警报。
在 executor server 端
- 可插拔的 job 类型 executor,如Hadoop的生态中的 job 类型。
下面是如何安装这些插件到Azkaban的说明
用户管理器插件
默认情况下,azkaban 使用 XMLUserManager类及
conf/azkaban-users.xml
管理权限。
这是不安全的,不能服务于许多用户。在实际生产部署,应该依赖与适合自己的用户管理器类,比如基于LDAP的。该
XMLUserManager
仍然可以用于特殊帐户和角色的
管理
。
要安装自己的用户管理器类,指定
Azkaban2-web-server-install-dir/conf/azkaban.properties
:
user.manager.class = MyUserManagerClass
并把jar放到
plugins
目录中。
浏览器插件
HDFS浏览器插件
HDFS浏览器插件的安装应AzkabanWebServer plugins目录下,它被指定在AzkabanWebServer的配置文件,例如,在
Azkaban2-web-server-install-dir/conf/azkaban.properties
:
viewer.plugins = HDFS
这是告诉 azkaban 载入HDFS浏览器插件从
Azkaban2-web-server-install-dir/plugins/viewer/hdfs
。
提取
azkaban-hdfs-viewer
归档到AzkabanWebServer
./plugins/viewer
目录。重命名为
HDFS
,跟上面指定的一样。
- 如果Hadoop是非安全启动,默认的配置也够用了。我们可以简单地重启
AzkabanWebServer
,就可以使用HDFS界面了 - 如果Hadoop是安全启动,下面的就不同于默认值了,需要修改下,在插件的配置文件:
参数 | 描述 |
---|---|
azkaban.should.proxy | Azkaba 是否应代理为其他用户查看HDFS文件系统,而不是azkaban本身,默认为true |
hadoop.security.manager.class | 所使用的安全管理器,它处理与Hadoop集群的通话,默认为azkaban.security.HadoopSecurityManager_H_1_0 认(对于hadoop的1.x版) |
proxy.user | 在azkaban的用户配置使用Kerberos和Hadoop。类似于如何Oozie的应配置,用于安全的hadoop安装 |
proxy.keytab.location | 该密钥表文件与阿兹卡班可以使用Kerberos身份验证为指定的位置proxy.user |
欲了解更多Hadoop的安全相关的信息,请参阅HadoopSecurityManager
job类型插件
azkaban有一组内置的作业类型仅限于运行本地UNIX命令和简单的Java程序。在大多数情况下,你会想安装其他作业类型的插件,例如,hadoopJava,pig,hive,VoldemortBuildAndPush等。下面是如何安装:
job类型插件应该在AzkabanExecutorServer的plugins目录进行安装,并在AzkabanExecutorServer的配置文件中指定。例如,在
Azkaban2-exec-server-install-dir/conf/azkaban.properties
:
azkaban.jobtype.plugin.dir =plugins/jobtypes
这告诉azkaban加载
Azkaban2-exec-server-install-dir/plugins/jobtypes
下所有作业类型
。解压到AzkabanExecutorServer
./plugins/
目录下,重命名为
jobtypes
如上面的规定。
当您运行Hadoop作业时,通常需要下面的设置:
参数 | 描述 |
---|---|
hadoop.home | 您的$HADOOP_HOME 设置。 |
jobtype.global.classpath | 特定的集群的hadoop资源,如hadoop-core jar及hadoop的配置(例如,${hadoop.home}/hadoop-core-1.0.4.jar,${hadoop.home}/conf ) |
取决于如果hadoop的安装被接通上:
- 如果Hadoop的安装没有安全开启,你可能可以依靠的默认设置。
- 如果Hadoop的安装确实有Kerberos身份验证打开,您需要填写以下Hadoop的设置:
参数 | 描述 |
---|---|
hadoop.security.manager.class | 所使用的安全管理器,它处理通话以固定的hadoop簇,默认为azkaban.security.HadoopSecurityManager_H_1_0(对于hadoop的1.x版) |
proxy.user | 在阿兹卡班的用户配置使用Kerberos和Hadoop。类似于如何Oozie的应配置,用于安全的hadoop安装 |
proxy.keytab.location | 该密钥表文件与阿兹卡班可以使用Kerberos身份验证指定的proxy.user的位置 |
欲了解更多Hadoop的安全相关的信息,请参阅
HadoopSecurityManager
最后,启动执行程序,注意有无错误信息,并检查执行程序服务器日志。对于作业类型的插件,执行者应该做最小测试,检验是否正确安装。
从2.1升级数据库
如果从头开始安装阿兹卡班,你可以忽略这个文件。这是只对那些谁是升级为2.1〜2.5。
所述update_2.1_to_3.0.sql
需要运行以改变所有的表。这包括几个表改变和新表。
下面是变化:
- 改变project_properties表“
- 修改“名称”栏中为255个字符
- 创建新表的触发器
从2.1导入现有时刻表
在3.0中,调度系统将合并到新的触发系统。这些信息将被保存在触发器
表中的DB。我们必须导入现有的日程安排到这个新表的简单工具。
在您下载并安装Web服务器,请运行此命令后,从网络服务器安装目录:
$庆典斌/ schedule2trigger.sh
从2.7.0升级数据库
如果从头开始安装阿兹卡班,你可以忽略这个文件。这是只对那些谁是升级,从2.7到3.0。
的create.executors.sql,update.active_executing_flows.3.0.sql,update.execution_flows.3.0.sql
和create.executor_events.sql
需要运行以改变所有的表。这包括几个表改建和两个新表。
下面是变化:
- 改变active_executing_flows表“
- 删除“端口”列
- 删除“主机”列
- 改变execution_flows表“
- 添加“executor_id”列
- 创建新的遗嘱执行人表
- 创建新的遗嘱执行人事件表