文章目录
1.安装部署
1.1.下载源码
https://github.com/azkaban/azkaban/tags
1.2.解压源码:
tar -zxf azkaban-3.85.1.tar.gz -C /opt/soft
1.3.编译源码
需要安装git, java环境
# Build Azkaban
./gradlew build
# Clean the build
./gradlew clean
# Build and install distributions
./gradlew installDist
# Run tests
./gradlew test
# Build without running tests
./gradlew build -x test
1.4.打包等待
过程较慢,耐心等待…
如果不想进行测试,或者执行test命令报错,直接运行最后一句./gradlew build -x test
打包命令。
1.5.拷贝安装包
编译好的目录如下,拷贝对应包并解压到合适的目录,重命一个简短的名称。
安装包在对应的目录下:
比如 /opt/soft/azkban/azkaban-3.85.1/azkaban-exec-server/build/distributions 下面是执行器的azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz。
拷贝解压好并重命名后如下: 因为不是单机模式,所以暂时没有solo-server。
1.6.初始化数据库
创建好数据库后,用上面azkaban-db中的脚本初始化
-- 创建一个数据库
mysql> create database azkaban;
-- 创建一个用户
mysql> create user 'azkaban'@'%' identified by 'Azkaban@123';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
-- 切换数据库,执行脚本
mysql> use azkaban;
mysql> source /opt/soft/create-all-sql-0.1.0-SNAPSHOT.sql;
1.7.配置azkaban
-
配置exec-server
exec-server配置文件:azkaban.properties
汉字注释的地方都需要修改下。
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index #修改为绝对路径 web.resource.dir=/opt/module/azkaban/azkaban-exec-server/web/ #修改时区 default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager #修改为绝对路径 user.manager.xml.file=/opt/module/azkaban/azkaban-exec-server/conf/azkaban-users.xml # Loader for projects executor.global.properties=/opt/module/azkaban/azkaban-exec-server/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8081 # Where the Azkaban web server is located azkaban.webserver.url=http://localhost:8081 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban plugin settings 修改为绝对路径 azkaban.jobtype.plugin.dir=/opt/module/azkaban/azkaban-exec-server/plugins/jobtypes # Azkaban mysql settings 修改数据库配置 database.type=mysql mysql.port=3306 mysql.host=192.168.111.204 mysql.database=azkaban mysql.user=azkaban mysql.password=Azkaban@123 mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.flow.threads=30
-
配置web-server
azkaban.properties
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/opt/module/azkaban/azkaban-web-server/web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager #修改为绝对路径 user.manager.xml.file=/opt/module/azkaban/azkaban-web-server/conf/azkaban-users.xml # Loader for projects 这里配置的exec的路径 executor.global.properties=/opt/module/azkaban/azkaban-exec-server/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8081 # Azkaban Executor settings # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=192.168.111.204 mysql.database=azkaban mysql.user=azkaban mysql.password=Azkaban@123 mysql.numconnections=100 #Multiple Executor #注意如果你的剩余内存不足6g必须把下面的 MinimumFreeMemory, 删除。不然会出错 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
azkaban-users.xml 添加一个web页面登录账号:
<user password="admin" roles="admin" username="admin"/> <azkaban-users> <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/> <user password="metrics" roles="metrics" username="metrics"/> <user password="admin" roles="admin" username="admin"/> <role name="admin" permissions="ADMIN"/> <role name="metrics" permissions="METRICS"/> </azkaban-users>
1.8.启动服务
先执行executor,再执行web,避免Web Server会因为找不到执行器启动失败。
启动exec-server
./bin/start-exec.sh
启动web-server
./bin/start-web.sh
通过jps命令查看是否启动:
如果启动web-server没反应,可以查看日志,如果报错:No active executors found
需要手动激活:
curl http://${executorHost}:${executorPort}/executor?action=activate
端口 exec-server目录下的executor.port文件查看:
curl http://localhost:33923/executor?action=activate
这里切记不要手动去改mysql的executors表的active字段为1,虽然改了可以安装webserver,但是改的不彻底,会为后续执行job留下隐患,所以必须要用上面的方式激活
如果是迁移已有的安装目录,可能需要重新初始化数据库,并删除curentPID,executore.port等文件重新激活。
1.9.配置ssl(可选)
证书如果要设置,建议使用阿里云的证书,否则按照下文自己生成,在执行job时,可能会报
[Azkaban] EXCEPTION
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
所以以下步骤仅做配置的参考,不建议去配置。
web-server的访问,可以配置ssl证书,采用https访问。只需如下两步:
-
第一步:生成证书
cd / keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Keytool:是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。
-keystore:指定密钥库的名称及位置(产生的各类信息将不在.keystore文件中)
-genkey:在用户主目录中创建一个默认文件".keystore"
-alias:对我们生成的.keystore进行指认别名;如果没有默认是mykey
-keyalg:指定密钥的算法 RSA/DSA 默认是DSA
密码最后设置成一样,好记,其他选项直接回车即可。
-
第二步:在web-server的azkaban.properties 增加如下配置
#原来是false,修改为true jetty.use.ssl=true jetty.ssl.port=8443 #SSL文件名(绝对路径) jetty.keystore=/opt/module/azkaban/azkaban-web-server/keystore #SSL文件密码 jetty.password=000000 #Jetty主密码与keystore文件相同 jetty.keypassword=000000 #SSL文件名(绝对路径) jetty.truststore=/opt/module/azkaban/azkaban-web-server/keystore #SSL文件密码 jetty.trustpassword=000000
-
第三步:重启webserver
#关闭webserver ./bin/shutdown-web.sh #启动 ./bin/start-web.sh
-
第四步:通过 https://ip:8443访问
2.使用Azkaban
Azkaban使用步骤:
编写job文件=》打包成zip=》新建工程=》上传zip包=》执行
2.1.简单入门
1)创建job描述文件
#first.job
type=command
command=echo 'this is my first job'
- 打包成zip
目前,Azkaban上传的工作流文件只支持xxx.zip文件。zip应包含xxx.job运行作业所需的文件和任何文件(文件名后缀必须以.job结尾,否则无法识别)。作业名称在项目中必须是唯一的。
简单步骤查看下面的录屏:
2.2.常见错误
- 错误1:
一直是prepare状态,很有可能是你的内存不够6G导致的回看步骤1.7中web-server的azkaban.properties你是否已经把MinimumFreeMemory, 字段删除?如果没删这话又没有6G内存的话~~这自检永远过不去,你的job就一直只能是准备状态。
-
错误2:
另一个坑是ssl如果使用自己生成的证书,也会导致执行失败。日志目录:安装目录/azkaban-web-server/logs/azkaban-webserver.log
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
-
错误3:
激活方式不对会导致
azkaban.executor.ExecutorManagerException: executor became inactive before setting up the flow 10
3.小结
本文讲了Azkaban的安装和基本介绍,后续会更新Azkaban如何在大数据开发中调度作业任务的使用,请多多关注。