1、前述css
Azkaban是一个工做流调度工具,由于须要各个任务之间有依赖关系,传统的Crontab 任务已经不能知足。前端
因此须要创建一套工做流引擎。相比Ooize来讲,Azkaban的优点是做为一个客户端来提供任务的提交。而Ooize是将任务随机分配到咱们的集群环境中。mysql
考虑到经常使用架构,因此咱们选择Azkaban进行工做流引擎。可是网上的搭建教程总会有各类各样的问题,实在使人烦心。折腾了好几天,终于把Azkaban搭建成功,特将详细步骤描述以下。git
这里给出一个建议,Azkaban千万不要用最新的搭建,由于你会有意想不到的坑。。github
2、具体步骤web
一、下载Azkaban的3.25.0的软件包 地址以下:sql
https://github.com/azkaban/azkaban/releases/tag/3.25.0数据库
二、下载后上传到对应服务器 目录上面。本文地址目录为/mnt/data8/ire/apache
三、解压目录并重命名浏览器
tar - xf azkaban-3.25.0.tar.gz
mv azkaban-3.25.0 azkaban
四、对源码编译
./gradlew build 编译
./gradlew build -x test 忽略测试 (当上一个命令执行不成功再执行这个命令,上个执行成功后就不须要了,由于有的时候总卡在编译测试上面,没办法进行了)
./gradlew installDist 打包
五、新建azkaban编译后的运行目录
我在根目录/mnt/data8/ire/下新建目录azkaban-ire
mkdir azkaban-ire
六、将build后的tar包cp到azkaban-ire
目录下
cp azkaban/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
cp azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
cp azkaban/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
解压对应jar 包 并重命名(强力建议) 由于后面会有一堆绝对路径的引入,名字太长,太麻烦。效果以下
tar -xf azkaban-db-0.1.0-SNAPSHOT.tar.gz
tar -xf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
tar -xf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
mv azkaban-db-0.1.0-SNAPSHOT azkaban-db
mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec-server
mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web-server
七、导入Azkaban-sql
选择一个数据库,或者新建一个数据库为Azkaban 命令以下:
CREATE DATABASE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
GRANT ALL ON azkaban.* to 'azkaban'@'localhost' IDENTIFIED BY 'azkaban';
flush privileges;
use azkaban;
source azkaban-ire/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql
这里建议手动执行吧 执行以前最好删除以前由于其余版本建立的表,以下:
drop table active_executing_flows; drop table active_sla; drop table execution_flows; drop table execution_jobs; drop table execution_logs; drop table executor_events; drop table executors; drop table project_events; drop table project_files; drop table project_flows; drop table project_permissions; drop table project_properties; drop table properties_index ; drop table projects; drop table properties; drop table triggers; drop table project_flow_files; drop table project_versions; drop table qrtz_blob_triggers,qrtz_calendars,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details,qrtz_locks,qrtz_paused_trigger_grps,qrtz_scheduler_state,qrtz_simple_triggers,qrtz_simprop_triggers,qrtz_triggers;
在create-all-sql-0.1.0-SNAPSHOT.sql里面最后一行能够去掉 ,由于已经有这个字段了。
八、配置azkaban-web-server
8.一、在azkaban-web-server中新建conf目录,结构以下
mkdir conf
├── conf
│ ├── azkaban-users.xml
│ ├── azkaban.properties
│ ├── global.properties
│ └── log4j.properties
azkaban-users.xml
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
<user username="metrics" password="metrics" roles="metrics"/>
<user username="admin" password="admin" roles="admin,metrics" />
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
azkaban.properties
# Azkaban Personalization Settings
#设置项目名称
azkaban.name=Test
#设置项目副标题
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#这里必定写成绝对路径 不然页面会找不到对应地址
web.resource.dir=/mnt/data8/ire/azkaban-ire/azkaban-web-server/web/
#必定要设置为上海,不然按美国时间执行
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#这里必定写成绝对路径
user.manager.xml.file=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/azkaban-users.xml
# Loader for projects
#这里必定写成绝对路径 不然页面会找不到对应地址
executor.global.properties=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
mysql.host=127.0.0.1
mysql.database=azkaban
mysql.user=root
mysql.password=root
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.use.ssl=false
jetty.port=8081
jetty.keystore=keystore
jetty.password=password
jetty.keypassword=keypassword
jetty.truststore=keystore
jetty.trustpassword=password
jetty.excludeCipherSuites=SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA
# Azkaban Executor settings
executor.port=12321
# mail settings
#mail.sender=email帐号
#mail.host=email服务器
#mail.user=email帐号
#mail.password=email密码
mail.sender=
mail.host=
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
global.properties (置空便可)
log4j.properties
log4j.rootLogger=INFO,C
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.err
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
8.二、生成keystore文件。
在conf目录下执行
keytool -keystore keystore -alias azkaban -genkey -keyalg RSA
具体执行效果以下:
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: azkaban.test.com
What is the name of your organizational unit?
[Unknown]: azkaban
What is the name of your organization?
[Unknown]: test
What is the name of your City or Locality?
[Unknown]: beijing
What is the name of your State or Province?
[Unknown]: beijing
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=azkaban.test.com, OU=azkaban, O=test, L=beijing, ST=beijing, C=CN correct?
[no]: yes
Enter key password for <azkaban>
(RETURN if same as keystore password)
8.三、在azkaban-web-server中新建logs目录,用于记录azkaban运行日志结构以下:
currentpid是在启动的时候生成的,不用管。
九、配置azkaban-exec-server
9.1在azkaban-exec-server中的conf目录下配置 没有conf目录则建立,同时建立对应下面文件
├── conf │ ├── azkaban.properties
│ ├── log4j.properties
azkaban.properties
# Azkaban
default.timezone.id=Asia/Shanghai # Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes # Loader for projects 绝对路径 executor.global.properties=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306 mysql.host=127.0.0.1 mysql.database=azkaban mysql.user=root mysql.password=root mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.port=12321 executor.flow.threads=30 # JMX stats jetty.connector.stats=true executor.connector.stats=true # uncomment to enable inmemory stats for azkaban #executor.metric.reports=true #executor.metric.milisecinterval.default=60000
log4j.properties
log4j.rootLogger=INFO,C
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.err
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
9.2 在azkaban-exec-server建立plugins/jobtypes 文件夹
mkdir -p plugins/jobtypes
在/jobtypes中生成commonprivate.properties文件 写入
execute.as.user=false
9.3 在azkaban-exec-server建立logs目录
9.4 最终azkaban-exec-server目录层级以下:
上图中圈出的即为建立相应文件夹后的格式,而 executors projects temp目录会在执行任务时建立 不用管。
十、启动azkaban-web-server
必定要在bin层启动 不在bin目录里面启动 以下:
cd azkaban-web-server/
bin/start-web.sh
十一、启动azkaban-exec-server
cd azkaban-exec-server/
bin/start-exec.sh
十二、验证效果以下:
1三、前端启动host:8081便可
1四、注意千万不要用firefox浏览器打开,用google,不然会出现以下界面。不兼容,致使Job不能查看。