Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。可以以计划、批量的模式对HDFS上的数据执行Hive、Sqoop等命令。
安装之前,可以先了解以下,Azkaban的组成:Azkaban Web Server、Azkaban Executor Server、MySQL。(这里就不细讲了)
|
Webapp200 |
Hadoop100 |
Hadoop101 |
Hadoop102 |
Metastore |
√ |
|
|
|
azkaban-exec-server |
|
√ |
√ |
|
azkaban-web-server |
|
|
|
√ |
笔者这里只做了exec-server的高可用,metastore部分仍然采用的是一个MySQL,后续再进行拓展,考虑将mysql部分部署成主从模式。
Azkaban官方不提供直接的安装文件,需要自己去官网(https://azkaban.github.io/)下载源码自行编译。
可以参考笔者的另外一篇文章:Azkaban源码编译。
编译完成后一共生成3份文件:
azkaban-db-***.tar.gz:Azkaban元数据脚本
azkaban-exec-server-***.tar.gz:Azkaban Executor服务
azkaban-web-server-***.tar.gz:Azkaban Web服务
Azkaban的元数据需要保存在mysql当中,所以必须要安装mysql,mysql安装步骤本文就不细讲了,略过。
编译好的3份文件中,有一份是SQL脚本,将其解压,找到create-all-sql-***.sql文件,到mysql中执行,将Azkaban的元数据建立好。
到解压的conf目录下修改azkaban.properties文件
detault.timezone.id=Asia/Shanghai
executor.global.properties=/opt/module/azkaban-executor-3.86.0/conf/global.properties
database.type=mysql
mysql.port=3306
mysql.host=webapp200
mysql.database=azkaban
mysql.user=root
mysql.password=password
mysql.numconnections=100
修改完后分发到其他机器上。分发脚本可以参考我的另外一篇文章:大数据实操篇 No.2-Hadoop集群搭建 中的 3.2.2 编写xsync集群分发脚本
注意:Azkaban-3.X之后,可以不配置SSL,web服务可不通过https进行访问,直接通过http进行访问。
可以直接在azkaban.properties中设置
jetty.use.ssl=false
笔者这里安装过一次2.5.0,所以记录以下此版本的安装步骤
采用Keytool进行生成,Keytool是java数据证书管理工具,使用用户能够管理自己的公钥私钥对,及相关证书。
-keystore 指定密钥库的名称及位置(产生的各类信息将存在keystore文件中)
-genkey(或者-genkeypair)生产密钥对
-alias 为生产的密钥对指定别名,默认时mykey
-keyalg 指定密钥的算法RSA/DSA,默认时DSA
开始配置,先到web-server目录下执行如下命令
$ keytool -keystore keystore -alias zihaokey -genkey -keyalg RSA
根据提示,输入自己的信息
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: zihao
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN=zihao, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
[no]: y
Enter key password for
(RETURN if same as keystore password):
Re-enter new password:
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".
笔者这里输入的密钥库口令和zihaokey口令为123456
注意这种方式采用的是RSA非对称加密,公钥存在证书当中,私钥存在zihaokey当中
生成后可以用命令查看密钥和证书信息
$ keytool -keystore keystore -list
到conf目录下,修改azkaban.properties文件
web.resource.dir= /opt/module/azkaban-web-3.86.0/web/
detault.timezone.id=Asia/Shanghai
user.manager.xml.file=/opt/module/azkaban-web-3.86.0/conf/azkaban-users.xml
database.type=mysql
mysql.port=3306
mysql.host=webapp200
mysql.database=azkaban
mysql.user=root
mysql.password=password
mysql.numconnections=100
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
##客户端判断服务端是否可信,所用的的密钥信息
#密钥库
jetty.keystore=/opt/module/azkaban-web-3.86.0/keystore
#密钥库口令
jetty.password=123456
#密钥口令
jetty.keypassword=123456
##服务器判断客户端是否可信,所用的密钥信息
jetty.truststore=/opt/module/azkaban-web-3.86.0/keystore
jetty.trustpassword=123456
#发送者邮箱
[email protected]
mail.host=stmp.qq.com
[email protected]
#邮箱授权码
mail.password=******
(密码信息根据自己的配置进行填写)
然后修改azkaban-user.xml,添加所需用户
这里用户名、密码都设置成admin
$ bin/start-exec.sh
$ bin/shutdown-exec.sh
进程名
AzkabanExecutorServer
注意azkaban3.X之后的版本,启动后要激活executor
Window浏览器访问地址激活:
http://hadoop100:12321/executor?action=activate
访问结果如下图:
或者
Linux系统下,在exec-server根目录下执行
curl -G " hadoop100:12321/executor?action=activate" && echo
可通过查看数据库azkaban数据库executors表查看是否激活
至此,exec-server就激活成功。
$ bin/start-web.sh
$ bin/shutdown-web.sh
进程名
AzkabanWebServer
打开浏览器进行验证,验证地址:https://hadoop102:8443/
至此,web-server就部署成功。同时,Azkaban整体也就安装部署完成。
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Could not create connection to database server.)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
Caused by: java.lang.NullPointerException
at com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3286)
问题原因:笔者azkaban lib目录下mysql连接驱动与安装的mysql版本不一致
解决办法:更换驱动:
将默认的mysql-connector-java-5.1.28.jar文件删除,换成mysql-connector-java-5.1.44-bin.jar
原因:akaban-web下的azkaban.properties配置文件了MinimumFreeMemory。滤器会检查 executor 主机空余内存是否会大于 6G,如果不足 6G,则 web-server 不会将任务交由该主机执行
解决办法:修改akaban-web下的azkaban.properties配置文件,去掉MinimumFreeMemory(或者直接给机器添加内存)
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
修改为
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
原因:由于windows下编写的shell脚本换行符是\r\n;而linux系统下换行符为\n
解决办法:用nodepad++替换字符;或者用dos2unix进行转换。