一个完整的大数据分析系统,必然由很多任务单元 (如数据收集、数据清洗、数据存储、数据分析等) 组成,所有的任务单元及其之间的依赖关系组成了复杂的工作流。复杂的工作流管理涉及到很多问题:
如何定时调度某个任务?
如何在某个任务执行完成后再去执行另一个任务?
如何在任务失败时候发出预警?
…
面对这些问题,工作流调度系统应运而生。
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
Azkaban是一个开源的数据管道和任务调度系统,用于协调和管理大规模数据处理任务,通常用于处理大规模数据处理任务、数据管道和工作流程。1. 一个完整的大数据分析系统通常都是由大量任务单元组成:shell脚本程序,mapreduce程序、hive脚本、spark程序等。
2. 各任务单元之间存在时间先后及前后依赖关系:先后关系、依赖关系、定时执行。
3. 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。
主要分为三部分:
- WebServer :暴露Restful API,提供分发作业和调度作业功能;
- ExecServer :对WebServer 暴露 API ,提供执行作业的功能;
- MySQL :数据存储,实现Web 和 Exec之间的数据共享和部分状态的同步。如果是一个webServer + 1个 execServer = 单机版
一个webServer + N个 execServer = 集群版
1、上传解压zip安装包
unzip azkaban-3.56.0.zip
mv azkaban-3.56.0 /usr/local/2、生成mysql的元数据
在mysql中创建一个数据库,叫做azkban,运行create-all-sql-0.1.0-SNAPSHOT.sql
3、配置web-server
在web-server文件夹下:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
在web-server下面会多keystore
4、修改 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/local/azkaban-3.56.0/web-server/web
# 时区默认是美国时区,修改为上海时区
default.timezone.id=Asia/Shanghai# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/usr/local/azkaban-3.56.0/web-server/conf/azkaban-users.xml# Loader for projects
executor.global.properties=/usr/local/azkaban-3.56.0/web-server/conf/global.properties
azkaban.project.dir=projects
# 配置mysql数据库连接的
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100# Velocity dev mode
velocity.dev.mode=false# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081# 此处是我们的生成的秘钥密码
jetty.keystore=keystore
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=keystore
jetty.trustpassword=123456# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30# mail settings
#[email protected]
#mail.host=smtp.163.com
#[email protected]
#mail.password=KFJYOIGXRIVFFIKP
# 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.native.lib=false
# Azkaban plugin settingsazkaban.jobtype.plugin.dir=plugins/jobtypes
在web-server/conf 目录下 azkaban-users.xml中添加
修改conf 下的azkaban.properties
# Azkaban Personalization Settings
azkaban.name=Azkaban
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/usr/local/azkaban-3.56.0/web-server/web/
default.timezone.id=Asia/Shanghai# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/usr/local/azkaban-3.56.0/web-server/conf/azkaban-users.xml# Loader for projects
executor.global.properties=/usr/local/azkaban-3.56.0/exec-server/conf/global.properties
azkaban.project.dir=projects/
azkaban.execution.dir=execution/
executor.flow.threads=30
flow.num.job.threads=10
job.log.chunk.size=100
job.log.backup.index=10
job.max.Xms=1
job.max.Xmx=2
azkaban.server.flow.max.running.minutes=-1# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=bigdata01
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30# JMX stats
jetty.connector.stats=true
executor.connector.stats=trueazkaban.native.lib=lib/
#azkaban.jobtype.plugin.dir=plugins/jobtypes
# uncomment to enable inmemory stats for azkaban
#executor.metric.reports=true
#executor.metric.milisecinterval.default=60000
在plugins/jobtypes/commonprivate.properties
set execute-as-user
execute.as.user=false
memCheck.enabled=false
因为之前编译这个azkaban的时候使用的驱动包比较老,所以删除掉,换新的。
此处记得修改两个文件夹下的lib (web-server,exec-server)
cd /opt/installs/azkaban/exec-server/lib
rm -rf mysql-connector-java-5.1.28.jarcp /opt/installs/sqoop/lib/mysql-connector-java-8.0.26.jar ./
cd /opt/installs/azkaban/web-server/lib
rm -rf mysql-connector-java-5.1.28.jarcp /opt/installs/sqoop/lib/mysql-connector-java-8.0.26.jar ./
需要将exec-server下以及 web-server 下所有的执行脚本都赋权限
修改web-server 下的执行权限:
cd /opt/installs/azkaban/web-server/bin
chmod 777 start-web.sh shutdown-web.sh
cd internal/
chmod 777 internal-start-web.sh util.sh修改exec-server 下的执行权限:
cd /opt/installs/azkaban/exec-server/bin
chmod 777 start-exec.sh shutdown-exec.sh
cd internal/
chmod 777 internal-start-executor.sh util.sh
cd /opt/installs/azkaban-3.56.0/web-server/bin
./start-web.shcd /opt/installs/azkaban-3.56.0/exec-server/bin
./start-exec.sh
可以通过以下查看进程
可以打开网页端端口号8081