Azkaban3.39.0部署及使用说明书
作者:刘镇锌(CSC BI SRD Dept)原版
补充:王永森
系统内存3G以上(否则任务无法执行),以3.39.0-17为例
从Azkaban官网上下载3.X的源码资料
cd /opt
下载命令:git clone https://github.com/azkaban/azkaban.git(2017-12-24克隆的版本为:3.39.0-17-g7b7833a)
执行命令将azkaban克隆到本地opt目录下。
进入到Azkaban的根目录下面进行编译,执行./gradlew build(这里需要等待一些时间)
编译成功会显示下图界面
编译好的文件都放在build/distributions/目录下
执行cp –r azkaban-*/build/distributions/*.tar.gz /opt/ 拷贝编译好的tar.gz包
1)建库,同时授权
用root登录mysql
mysql -uroot -p123456
创建azkaban数据库
CREATE DATABASE azkaban;
授权
Grant all on azkaban.* toazkaban@'master' identified by 'azkaban';
Grant all on azkaban.* toazkaban@'localhost' identified by'azkaban';
Grant all on azkaban.* toazkaban@'%' identified by 'azkaban';
2)运行相关脚本建表
解压azkaban-db-3.39.0-17-g7b7833a.tar.gz
tar –zxvf azkaban-db-3.39.0-17-g7b7833a.tar.gz
用azkaban用户登录
mysql -uazkaban –pazkaban
在mysql的azkaban库里source以下这个sql脚本,建表
1)解压azkaban-web-server-3.0.0.tar.gz到指定目录
tar -zxvf azkaban-web-server-3.39.0-17-g7b7833a.tar.gz–C /opt/
(
一般克隆后没有conf目录,需要从azkaban-solo-server-3.39.0-17-g7b7833a copy
此时还需要copy plugins/目录
)
2)配置jetty ssl
到其web目录下运行
keytool -keystore keystore -alias jetty-genkey -keyalg RSA
Enter keystore password: password
What is your first and last name? 您的名字与姓氏是什么?
[Unknown]: jetty.mortbay.org
What is the name of your organizationalunit?您的组织单位名称是什
[Unknown]: Jetty
What is the name of your organization?您的组织名称是什么?
[Unknown]: Mort Bay Consulting Pty. Ltd.
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 forthis unit?该单位的两字母国家代码是什么
[Unknown]:
Is CN=jetty.mortbay.org, OU=Jetty, O=MortBay Consulting Pty. Ltd.,
L=Unknown, ST=Unknown, C=Unknown correct?正确吗?
[no]: yes
Enter key password for
(RETURNif same as keystore password): password
注意:这里要设置的密码比较多,为了防止弄混,建议全用一样的密码,至于要让填写信息的,直接回车即可,会返回unknown。
完成上述工作后,将在当前目录生成 keystore 证书文件
3)修改web控制文件
进入web服务器安装目录conf目录,修改azkaban.properties文件
命令vim azkaban.properties
内容说明及更改如下:
#Azkaban Personalization Settings
azkaban.name=Test #服务器UI名称,用于服务器上方显示的名字
azkaban.label=My LocalAzkaban #描述
azkaban.color=#FF3601 #UI颜色
azkaban.default.servlet.path=/index #
web.resource.dir= /opt/azkaban-web-server-3.39.0-17-g7b7833a/web/
#默认根web目录,建议改成全路径,可以在任何地方直接运行,下同
default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海默认为美国
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类
user.manager.xml.file=/opt/azkaban-web-server-3.39.0-17-g7b7833a/conf/azkaban-users.xml
#用户配置,具体配置参考下文
#Loader for projects
executor.global.properties=/opt/azkaban-web-server-3.39.0-17-g7b7833a/conf/global.properties
# global配置文件所在位置
azkaban.project.dir=projects
database.type=mysql #数据库类型
mysql.port=3306 #端口号
mysql.host=x.x.x.x #数据库连接IP
mysql.database=azkaban #数据库实例名
mysql.user=azkaban #数据库用户名
mysql.password=azkaban #数据库密码
mysql.numconnections=100 #最大连接数
# Velocity dev mode
velocity.dev.mode=false
# Jetty服务器属性.
jetty.maxThreads=25 #最大线程数
jetty.ssl.port=8443 #Jetty SSL端口
jetty.port=8081 #Jetty端口
jetty.keystore=/opt/azkaban-web-server-3.39.0-17-g7b7833a/web/keystore #SSL文件名,使用keytool生成的keystone文件
jetty.password=azkaban #SSL文件密码
jetty.keypassword=azkaban #Jetty主密码与 keystorm文件相同
jetty.truststore=keystore #SSL文件名
jetty.trustpassword=azkaban # SSL文件密码
# 执行服务器属性
executor.port=12321 #执行服务器端口
# 邮件设置(如果不用邮件报警功能,这里可以不设置)
mail.sender= #发送邮箱
mail.host= #发送邮箱smtp地址
mail.user= #发送邮件时显示的名称
mail.password= #邮箱密码
job.failure.email= #任务失败时发送邮件的地址,一般不设置,在任务运行时设置,下同
job.success.email= #任务成功时发送邮件的地址
lockdown.create.projects=false #
cache.directory=cache #缓存目录
4)用户配置(可以不做另外设置)
进入azkaban web服务器conf目录,修改azkaban-users.xml,这个文件存放用户登录信息以及权限信息。同时增加管理员用户admin。
5)配置plugins
在Azkaban 3.0至后版本中增加了一个新的安全性增强功能,默认情况下,Azkaban作业现在可以作为提交用户或流的user.to.proxy运行。这确保了Azkaban利用Linux权限安全机制,并在操作上简化了资源监视和可见性。
Execute.as.user默认设置为true。在需要的情况下,也可以在azkaban-plugin的commonprivate.properties中将其配置为false
所以将copy过来的plugins/jobtypes/ commonprivate.properties 文件,添加Execute.as.user=false。
如果需要使用这个安全策略,则需要配置azkaban.native.lib = execute-as-user.c文件所在的路径[参见:http://azkaban.github.io/azkaban/docs/latest/#jobtype-pluginsPlugin Configurations Execute-As-User]
注意:execute-as-user.c文件gcc编译后,见下图:
5)启动web server
在web目录下创建日志文件夹:
cd /opt/azkaban-web-server-3.39.0-17-g7b7833a
mkdir logs 用来存放程序运行的日志文件
启动web:sh bin/azkaban-web-start.sh
查看是否启动成功,首先jps查看是否含有azkaban web server进程,然后访问网页(用火狐或者谷歌)https://主机ip:8081
输入之前在azkaban-users.xml中设置好的用户名密码,进入即可。
自此完成了azkaban的web-server设置与启动,还需要安装执行服务:exec-server
1)解压azkaban-exec-server-3.39.0-17-g7b7833a.tar.gz到指定opt目录
tar -zxvf azkaban-exec-server-3.39.0-17-g7b7833a.tar.gz–C /opt/
1) cp –r azkaban-solo-server-3.39.0-17-g7b7833a/plugins/jobtypes azkaban-exec-server-3.39.0-17-g7b7833a/
a) 修改commonprivate.properties文件中参数为false。
2)修改执行控制文件
cd azkaban-exec-server-3.39.0-17-g7b7833a/conf/
vi azkaban.properties
#Azkaban
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes
azkaban.jobtype.plugin.dir=/opt/azkaban-exec-server-3.39.0-17-g7b7833a/plugins/jobtypes
#Loader for projects
executor.global.properties=/opt/azkaban-exec-server-3.39.0-17-g7b7833a/conf/global.properties
azkaban.project.dir=projects
#database
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
#executor set
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
3)启动web server
cd azkaban-exec-server-3.39.0-17-g7b7833a/
mkdir logs 用来存放程序运行的日志文件
启动executor server服务:sh bin/azkaban-executor-start.sh
异常azkaban报错:azkaban.utils.UndefinedPropertyException: Missing requiredproperty azkaban.native.lib
解决方法:在azkaban-executor-server目录里把azkaban-solo-web下/plugins/jobtypes/commonprivate.properties拷贝过来(带目录一起拷贝)加一行参数
azkaban.native.lib=false
保存后重启azkaban-executor-server就行了
异常Exception in thread "main"azkaban.jobtype.JobTypeManagerException
1. 不存在azkaban-jobtype-3.0.0.jar,将azkaban-jobtype-3.0.0.jar拷贝到plugins/jobtypes
点击Create Project,由于azkaban是国外Linkedin发布实现的开源调度平台,所以暂时不支持中文,创建项目的时候不能包含中文。
Job的编写很简单,只要在.job文件内标注脚本类型,脚本运行语句以及依赖的job名,如下:
type=command
#脚本存储路径
command=sh/root/dim/helloworld.sh
#依赖属性=依赖任务的job名称
dependencies=D_DWD_BRD_AUTH_LOG
由于linux系统编码原因,如果job文件里面含有中文需要用ue更改字符编码为UTF-8 – 无BOM。
这里列举的例子是command类型的脚本,即shell命令,其中${pdate}是运行是传入的参数,如没有可去掉,也可以有多个参数,参数命名和调用时相同即刻生效。
其他程序的调用方法(java,pig,python等)请参考
http://blog.csdn.net/xiaolang85/article/details/23171303
编写完流程所有job后,要打包成一个zip文件,上传到azkaban。
点击project,可以看到若干条工作流。
上面三个菜单依次是任务流列表,权限设置,项目变更日志。
每个任务流右边的三个按钮的功能依次是执行任务流,执行记录和和执行概览。
执行任务流时,如果job内设置了参数,则需要设置同样的参数名。
Schedule为定时执行,Execute为立即执行。
对于定时任务,设置如下
图为3.0版本之前的定时设定方式
图为3.0之后定时执行的方式
Time和date为第一次运行的时间(该事件可以在当前时间之前,则第一次运行的时间是在当前开始的第一次运行时间),Recurrence则是运行周期(偏移量)。
执行记录:记录了任务流的运行状况(时间、运行结果等)。
当任务流某个或者某几个任务运行失败的时候,整个任务流将停止。恢复流程时,依次点击history、点击相应的任务流、Prepare Execution,然后重新运行。
在运行准备页面,右键某个任务,可以设置开启或关闭该任务的相关任务
从上往下依次是:父节点,祖节点(该节点之上的所有节点),子节点,孙节点(该节点之后的所有节点),所有节点。利用该功能可以设置指定任务运行。
邮件功能有三种设置方式:
(1) 在web配置文件中设置,只能用于全局,一般不常用
(2) 在job的zip包里加入.properties文件,则会自动读取器内容,文件内容形式如下,邮箱之间用逗号分隔,该方式一般用于定时任务调度
# system.properties
[email protected], [email protected],[email protected],[email protected]
failure.emails= [email protected], [email protected],[email protected],[email protected]
(3) 在运行设置页面Notification设置,如果使用了方式二,则这里会默认有相关的邮箱地址,可以手动修改,方式三可覆盖方式二。
1)FailureOptions(失败选择)
当某个任务运行失败的时候,可以对整个流程的运行进行设置,有以下三种运行设置。
从上往下依次是将正在运行的任务运行完,杀死正在运行的任务,除失败任务以及其后续的依赖任务以外全部运行。
2)Concurrent(并发执行选项)
当某个流程同一时间内多次执行,可以用该选项设置并发,即当该流程正在运行的时候,下一次运行该流程时的操作
从上往下依次是取消运行,正常运行,level1接到同一个任务之后运行,level2接到同一个任务的子任务之后运行
3)SLA
定时任务可设置SLA选项(类似于售后服务)
如果某个流程(或者流程中某个关键任务)运行时间过长或运行失败,则可发送邮件给相关人员,同时可设置是否杀死该任务。
Duration表示该任务在某个时间之前还未运行成功或者运行完成。