azkaban是一个开源的任务调度系统,用于负责任务的调度运行(如数据仓库调度),用以替代linux中的crontab。官网:https://azkaban.github.io/
azkaban主要有三部分构成:
1. MySQL:Azkaban使用MySQL来存储项目和执行。
2. Azkaban Web Server:Azkaban使用Jetty作为Web服务器,用作控制器以及提供Web界面
3. Azkaban Executor Server:Azkaban执行服务器执行提交工作流。
本文主要使用的是azkaban3.43,如果您从github源代码生成编译tar包时候可以留言,我可以给您分享我已经测试通过的安装包文件。
安装包文件主要有:
1. azkaban-db-3.43.0.tar.gz
2. azkaban-solo-server-3.43.0.tar.gz
3. azkaban-exec-server-3.43.0.tar.gz
4. azkaban-web-server-3.43.0.tar.gz
5. azkaban-hadoop-security-plugin-3.43.0.tar.gz
其中solo是单机版本,我搭建的是多执行节点,单web server节点的版本。
注意:本文默认azkaban的目录位于/azkaban
数据库
首先需要安装MySQL数据库,然后创建一个叫azkaban的数据库。mysql中执行
source /azkaban/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql
配置文件
0. 配置keystore,keystore的位置位于/azkaban/azkaban-web/conf/(需要与配置文件中路径对应)
keytool -keystore keystore -alias jetty -genkey -keyalg RSA 输入密钥库口令: azkaban 再次输入新口令: azkaban 您的名字与姓氏是什么? [Unknown]: 略过 您的组织单位名称是什么? [Unknown]: 略过 您的组织名称是什么? [Unknown]: 略过 您所在的城市或区域名称是什么? [Unknown]: 略过 您所在的省/市/自治区名称是什么? [Unknown]: 略过 该单位的双字母国家/地区代码是什么? [Unknown]: CN CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN是否正确? [否]: Y 输入 <jetty> 的密钥口令 (如果和密钥库口令相同, 按回车):
1. /azkaban/azkaban-web/conf/azkaban.properties
# Azkaban Personalization Settings azkaban.name=Allin azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/azkaban/azkaban-web-server/web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/azkaban/azkaban-web-server/conf/azkaban-users.xml # Loader for projects executor.global.properties=/azkaban/azkaban-web-server/conf/global.properties azkaban.project.dir=/azkaban/azkaban-web-server/projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8443 jetty.keystore=//azkaban/azkaban-web-server/conf/keystore jetty.password=yourpassword jetty.keypassword=yourpassword jetty.truststore=//azkaban/azkaban-web-server/conf/keystore jetty.trustpassword=yourpassword # Azkaban Executor settings executor.port=12321 # 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=/azkaban/azkaban-web-server/plugins/jobtypes database.type=mysql mysql.port=3306 mysql.host=127.0.0.1 mysql.database=azkaban mysql.user=root mysql.password=yourmysqlpassword mysql.numconnections=100
2. /azkaban/azkaban-exec/conf/azkaban.properties
# Azkaban Personalization Settings default.timezone.id=Asia/Shanghai # Loader for projects executor.global.properties=/azkaban/azkaban-exec-server/conf/global.properties azkaban.project.dir=/azkaban/azkaban-exec-server/projects azkaban.jobtype.plugin.dir=/azkaban/azkaban-exec-server/plugins/jobtypes database.type=mysql mysql.port=3306 mysql.host=127.0.0.1 mysql.database=azkaban mysql.user=root mysql.password=yourpassword mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.port=12321 executor.flow.threads=30
3. /azkaban/azkaban-web/conf/log4j.properties /azkaban/azkaban-exec/conf/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
4. 如果是多执行节点,需要在/azkaban/azkaban-web/conf/azkaban.properties中追加以下配置,并且在数据库中插入对应执行节点的ip和端口号
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
插入执行节点ip和端口号:
insert into executors(host,port) values("your ip1",12321); insert into executors(host,port) values("your ip2",12321);
5. 配置用户名密码/azkaban/azkaban-web/conf/azkaban-users.xml
只要有一些计算机基础,打开这个配置文件,一目了然。
6. 创建日志文件夹
mkdir /azkaban/azkaban-web/logs mkdir /azkaban/azkaban-exec/logs
7. 启动
azkaban/azkaban-exec/bin/start-exec.sh azkaban/azkaban-web/bin/start-web.sh
遇到的坑
1. keystore的位置需要与配置文件中keystore设置的文件路径对应。
2. azkaban3以上才支持多执行节点。
3. 7中启动方式是静默方式,开始测试的时候建议使用:
azkaban/azkaban-exec/bin/azkaban-web-start.sh azkaban/azkaban-exec/bin/azkaban-exec-start.sh
这样能看到是否报错,什么原因报错。
4. 根据报错说明,有可能没有正确创建logs文件夹或者路径不对。
5. 因为web server会去检查exec server,所以建议先启动exec server。
6. 如果多节点任务不执行,有可能是执行节点的资源不够。注意查看配置,该配置指定服务器在什么内存、CPU等资源条件下才执行任务,以及如果不指定节点,如果分配执行节点。如果不限制资源,请修改或者注释相关配置。
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
7. 如何指定节点执行job:
在 flow params中设置”useExecutor” = EXECUTOR_ID即可
详情请查看:
https://www.jianshu.com/p/ffb7bbc1988f
匿名 2019/07/26 10:18
指定节点执行job如何写到配置文件中