Azkaban是一种类似于Oozie的工作流控制引擎,可以用来解决多个Hadoop(或Spark等)离线计算任务之间的依赖关系问题。
也可以用其代替crontab来对周期性任务进行调度,并且更为直观,可靠,同时提供了美观的可视化管理界面。
原理架构:
- MySQL实例:Azkaban使用MySQL来存储项目执行流状态。
- Azkaban Web服务器:Azkaban使用Jetty作为Web服务器,作为控制器管理整个Azkaban工作流系统,负责用户登录认证,project管理、定时执行工作流、跟踪工作流执行进度以及提供Web界面
- Azkaban执行服务器:Azkaban执行服务器负责具体的工作流的提交,执行,通过访问mysql数据库协调任务的执行。
Azkaban三种运行模式:
- solo server mode
- H2
- web server 和 executor server运行在一个进程里
- 最简单模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。
- two server mode
- MySQL(主从结构)
- web server 和 executor server运行在不同的进程
- 数据库为mysql,管理服务器和执行服务器在不同进程,这种模式下,管理服务器和执行服务器互不影响
- multiple executor mode
- MySQL(主从结构)
- web server 和 executor server运行在不同的进程
- executor server有多个
- 该模式下,执行服务器和管理服务器在不同主机上,且执行服务器可以有多个。
源码编译:
安装git:
[root@localhost azkaban]# yum install git -y
克隆项目:
[root@localhost azkaban]# git clone https://github.com/azkaban/azkaban.git
编译源码:
cd azkaban;执行./gradlew build installDist
[root@localhost azkaban]# cd azkaban/
[root@localhost azkaban]# ./gradlew build installDist
Downloading https://services.gradle.org/distributions/gradle-4.6-all.zip
若之前没有安装jdk,此处会报异常,需要安装JDK并配置环境变量,重新执行上述命令。(此处略)
编译成功!此处耗时间比较长
编译后安装包路径:
编译成功之后可在指定的路径下取得相应的安装包:
Solo-server模式安装包路径
[root@localhost azkaban]# ls azkaban-solo-server/build/distributions/
Two-server模式和multipie-executor模式 web-server安装包路径
[root@localhost azkaban]# ls azkaban-web-server/build/distributions/
Two-server模式和multipie-executor模式 exec-server安装包路径
[root@localhost azkaban]# ls azkaban-exec-server/build/distributions/
数据库相关安装包路径
[root@localhost azkaban]# ls azkaban-db/build/distributions/
解压安装Azkaban:
解压azkaban-web-server.tar.gz、azkaban-executor-server.tar.gz、azkaban-sql-script.tar.gz到/usr/java/azkaban目录下:
[root@localhost azkaban]# cd azkaban-web-server/build/distributions/
[root@localhost distributions]# tar -zxvf azkaban-web-server-3.91.0-122-g270defa.tar.gz -C /usr/java/azkaban/
[root@localhost azkaban]# cd azkaban-exec-server/build/distributions/
[root@localhost distributions]# tar -zxvf azkaban-exec-server-3.91.0-122-g270defa.tar.gz -C /usr/java/azkaban/
[root@localhost azkaban]# cd azkaban-db/build/distributions/
[root@localhost distributions]# tar -zxvf azkaban-db-3.91.0-122-g270defa.tar.gz -C /usr/java/azkaban/
[root@localhost azkaban]# mv azkaban-db-3.91.0-122-g270defa azkaban-db-3.91
[root@localhost azkaban]# mv azkaban-exec-server-3.91.0-122-g270defa azkaban-exec-server-3.91
[root@localhost azkaban]# mv azkaban-web-server-3.91.0-122-g270defa azkaban-web-server-3.91
初始化Azkaban元数据库:
登录mysql并执行azkaban-db-3.91目录下的create-all-sql(mysql安装此处略)
[root@localhost ~]# mysql -u root -p
mysql> create database azkaban;
mysql> use azkaban;
mysql> source /usr/java/azkaban/azkaban-db-3.91/create-all-sql-3.91.0-122-g270defa.sql
mysql> show tables;
配置:
首先备份azkaban.properties 和 azkaban-users.xml
web-server主配置文件 azkaban.properties,Azkaban 个性化设置,除了时区和web资源路径需要注意。
[root@localhost conf]# vi azkaban.properties
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/usr/java/azkaban/azkaban-web-server-3.91/web/ 【绝对路径】 default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/usr/java/azkaban/azkaban-web-server-3.91/conf/azkaban-users.xml 【绝对路径】 # Loader for projects executor.global.properties=/usr/java/azkaban/azkaban-web-server-3.91/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 executor.port=12321 【必须和executor端口保持一致】 # 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=127.0.0.1 mysql.database=azkaban mysql.user=root mysql.password=123456 mysql.numconnections=100 #Multiple Executor 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 |
web-server用户配置文件 azkaban-users.xml
[root@localhost conf]# vi azkaban-users.xml
<azkaban-users> <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/> <user password="metrics" roles="metrics" username="metrics"/> <role name="admin" permissions="ADMIN"/> <role name="metrics" permissions="METRICS"/> </azkaban-users> |
executor-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=web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=conf/azkaban-users.xml # Loader for projects executor.global.properties=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=plugins/jobtypes # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=127.0.0.1 mysql.database=azkaban mysql.user=root mysql.password=123456 mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.port=12321 【必须和web-server端口保持一致】 executor.flow.threads=30 executor.props.resolve.overrideExisting.enabled=false |
启动服务:
启动web-server和exec-server,执行bin/azkaban-executor-start.sh 和 bin/azkaban-web-start.sh 命令。
[root@localhost azkaban]# cd azkaban-web-server-3.91/
[root@localhost azkaban-web-server-3.91]# bin/start-web.sh
[root@localhost azkaban-web-server-3.91]# cd ..
[root@localhost azkaban]# cd azkaban-exec-server-3.91/
[root@localhost azkaban-exec-server-3.91]# bin/start-exec.sh
关闭服务:
shutdown-web.sh
shutdown-exec.sh
查看服务:
[root@localhost azkaban-web-server-3.91]# jps
遇到的问题:
查看azkaban安装目录下log信息如下:
解决办法:
executor-server主配置文件 azkaban.properties中设置executor端口 12321
executor.port=12321
在MySql中执行:
mysql> update azkaban.executors set active=1;