第1章 Azkaban简介
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。可以以计划、批量的模式对HDFS上的数据执行Hive、Sqoop等命令。
第2章 编译与安装
安装之前,可以先了解以下,Azkaban的组成:Azkaban Web Server、Azkaban Executor Server、MySQL。(这里就不细讲了)
2.1 集群规划
|
Webapp200 |
Hadoop100 |
Hadoop101 |
Hadoop102 |
Metastore |
√ |
|
|
|
azkaban-exec-server |
|
√ |
√ |
|
azkaban-web-server |
|
|
|
√ |
笔者这里只做了exec-server的高可用,metastore部分仍然采用的是一个MySQL,后续再进行拓展,考虑将mysql部分部署成主从模式。
2.2 下载源码进行编译
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服务
2.3 安装配置Metastore
2.3.1 安装MySQL
Azkaban的元数据需要保存在mysql当中,所以必须要安装mysql,mysql安装步骤本文就不细讲了,略过。
2.3.2 Azkaban脚本导入
编译好的3份文件中,有一份是SQL脚本,将其解压,找到create-all-sql-***.sql文件,到mysql中执行,将Azkaban的元数据建立好。
2.4 安装配置azkaban-exec-server
2.4.1 修改配置文件
到解压的conf目录下修改azkaban.properties文件
detault.timezone.id=Asia/Shanghai
executor.global.properties=/opt/module/azkaban-executor-3.86.0/conf/global.propertiesdatabase.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集群分发脚本
2.5 安装配置azkaban-web-server
2.5.1 配置SSL(生成密钥对和证书)
注意: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]: yEnter key password for <zihaokey>(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
2.5.2 修改配置文件
到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.xmldatabase.type=mysql
mysql.port=3306
mysql.host=webapp200
mysql.database=azkaban
mysql.user=root
mysql.password=password
mysql.numconnections=100jetty.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#发送者邮箱
mail.sender=284616172@qq.com
mail.host=stmp.qq.com
mail.user=284616172@qq.com
#邮箱授权码
mail.password=******
(密码信息根据自己的配置进行填写)
然后修改azkaban-user.xml,添加所需用户
<user username=”admin” password=”admin” roles=”admin” />
这里用户名、密码都设置成admin
第3章 基本使用
3.1 启动/停止Executor服务
$ 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就激活成功。
3.2 启动/停止web服务器
$ bin/start-web.sh
$ bin/shutdown-web.sh
进程名
AzkabanWebServer
打开浏览器进行验证,验证地址:https://hadoop102:8443/
至此,web-server就部署成功。同时,Azkaban整体也就安装部署完成。
第4章 常见错误
4.1 Executor启动错误
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.NullPointerExceptionat 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
4.2 任务提交后一直为Preparing状态
原因: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
4.3 字符%0D问题
原因:由于windows下编写的shell脚本换行符是\r\n;而linux系统下换行符为\n
解决办法:用nodepad++替换字符;或者用dos2unix进行转换。