在当今大数据时代,数据处理和分析任务变得越来越复杂。一个完整的大数据分析系统通常由大量任务单元组成,如 shell 脚本程序、mapreduce 程序、hive 脚本、spark 程序等。这些任务单元之间存在时间先后及前后依赖关系,为了高效地组织和执行这些复杂的任务,需要一个强大的工作流调度系统。Azkaban 就是这样一个任务调度和编排工具,它可以帮助我们轻松地管理和执行大数据任务。本文介绍了 Azkaban 的简介、体系结构、安装步骤、使用方法等方面的内容。
一、Azkaban 简介
(一)遇到的问题及解决方案
在大数据处理过程中,我们经常会遇到以下问题:
- 多个脚本执行有顺序要求。例如,在启动 Hadoop 集群时,需要先启动 Zookeeper 集群,再启动 HDFS,接着启动 YARN,最后启动日志系统。
- 任务之间存在依赖关系。某些任务需要在其他任务完成后才能执行。
- 需要定时执行任务。例如,每天定时执行数据备份任务。
为了解决这些问题,我们需要一个任务编排工具。Azkaban 就是这样一个工具,它可以帮助我们组织和管理大数据任务,确保任务按照正确的顺序和时间执行。
(二)功能特点
- 任务调度和编排:Azkaban 可以调度和编排各种类型的任务,包括 shell 脚本、MapReduce 任务、Hive 脚本、Spark 任务等。
- 任务依赖管理:Azkaban 可以管理任务之间的依赖关系,确保任务按照正确的顺序执行。
- 定时任务执行:Azkaban 可以设置任务在特定的时间自动执行。
- 可视化管理界面:Azkaban 提供了一个可视化的管理界面,方便用户管理和监控任务的执行情况。
(三)与其他类似工具的比较
- Oozie:Oozie 也是一个任务调度和编排工具,但它比较笨重,安装包较大,功能强大但使用起来不太方便。
- DolphinScheduler:DolphinScheduler 是一个流行的任务调度工具,它具有易用性和强大的功能。与 Azkaban 相比,DolphinScheduler 在一些方面更加灵活和易于扩展。
二、Azkaban 的体系结构
Azkaban 主要由三部分组成:
(一)WebServer
- 功能:WebServer 是 Azkaban 的核心组件之一,它提供了一个可视化的管理界面,方便用户管理和监控任务的执行情况。WebServer 还负责分发作业和调度作业。
- 接口:WebServer 暴露了一系列的 RESTful API,方便用户通过编程的方式与 Azkaban 进行交互。
(二)ExecServer
- 功能:ExecServer 是 Azkaban 的执行引擎,它负责执行用户提交的任务。ExecServer 对 WebServer 暴露 API,提供执行作业的功能。
- 与 WebServer 的关系:WebServer 和 ExecServer 之间通过 API 进行通信。WebServer 负责分发作业和调度作业,ExecServer 负责执行作业。
(三)MySQL
- 功能:MySQL 是 Azkaban 的数据库,用于存储任务的元数据、任务的执行状态等信息。MySQL 实现了 Web 和 Exec 之间的数据共享和部分状态的同步。
- 数据库设计:Azkaban 的数据库设计简洁明了,主要包括任务表、任务执行状态表、任务依赖关系表等。通过这些表,Azkaban 能够有效地管理和跟踪任务的执行情况。
- 数据库配置:在安装 Azkaban 时,需要在 MySQL 中创建一个名为 azkaban 的数据库,并执行相应的 SQL 脚本,生成元数据。
三、Azkaban 的安装步骤
Azkaban 的安装可以分为两种方式:使用源码安装和使用安装包安装。下面以使用安装包安装为例,介绍 Azkaban 的安装步骤。
通过网盘分享的文件:azkaban-3.56.0.zip
(一)上传和解压安装包
- 使用命令
yum install unzip
安装解压工具。 - 把
azkaban - 3.56.0.zip 拉到 /opt/moudles/ 目录下
- 使用命令
unzip azkaban - 3.56.0.zip - d /opt/installs/
解压安装包到指定目录。 - 移动到指定位置:cd
/opt/installs/
重命名:mv azkaban - 3.56.0/ azkaban
。
yum install unzip
unzip azkaban-3.56.0.zip -d /opt/installs/
cd /opt/installs/
mv azkaban-3.56.0/ azkaban
(二)生成 MySQL 元数据
在 MySQL 中创建一个名为 azkaban 的数据库:
create database azkaban CHARACTER SET UTF8;
在 MySQL 中执行 SQL 脚本
source /opt/installs/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;
或者在文件夹中解压 azkaban-3.56.0.zip
总共29个表,是Azkaban的元数据
(三)配置 web - server
进入 web - server 文件夹:
cd /opt/installs/azkaban/web-server
在web-server文件夹下:
执行该命令生成keystore 文件
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
密码默认设置为 123456,输入 Y 确认。
查看文件
修改web-server 下的conf 下的 azkaban.properties文件:
# Azkaban Personalization Settings
azkaban.name=YanGe的迈巴赫
azkaban.label=9.9包邮
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
# 此处需要编写绝对路径,如果跟我的安装路径一样,不需要改
web.resource.dir=/opt/installs/azkaban/web-server/web
# 时区默认是美国时区,修改为上海时区
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/opt/installs/azkaban/web-server/conf/azkaban-users.xml
# Loader for projects
executor.global.properties=/opt/installs/azkaban/web-server/conf/global.properties
azkaban.project.dir=projects
# 配置mysql数据库连接的
database.type=mysql
mysql.port=3306
mysql.host=bigdata01
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
#mail.sender=mx543042252@163.com
#mail.host=smtp.163.com
#mail.user=mx543042252@163.com
#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 settings
azkaban.jobtype.plugin.dir=plugins/jobtypes
注意要配置jetty
web-server/conf 目录下 azkaban-users.xml
<user password="admin" roles="admin,metrics" username="admin" />
(四)配置 exec - server
修改 exec - webserver 下的 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=/opt/installs/azkaban/web-server/web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/opt/installs/azkaban/web-server/conf/azkaban-users.xml
# Loader for projects
executor.global.properties=/opt/installs/azkaban/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=true
azkaban.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
修改 exec - webserver 下插件下的一个配文件
plugins/jobtypes/commonprivate.properties
set execute-as-user
execute.as.user=false
memCheck.enabled=false
修改驱动包:删除旧的 MySQL 驱动包,替换为新的驱动包。在 web - server
和 exec - server
两个文件夹下的 lib
目录中进行操作。
cd /opt/installs/azkaban/exec-server/lib
rm -rf mysql-connector-java-5.1.28.jar
cp /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.jar
cp /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
(六)启动 web - server 和 exec - server
cd /opt/installs/azkaban-3.56.0/web-server/bin
./start-web.sh
cd /opt/installs/azkaban-3.56.0/exec-server/bin
./start-exec.sh
四、Azkaban 的使用
需要注意的点:
1. azkaban的job流文件,后缀是.job
1) type属性 必须赋值
值有:command,java,pig
2. azkaban执行的job必须要提前打包,打包的格式必须是zip格式
不能打包文件夹,打包文件
3. 流文件里的书写格式:
1)一定要注意行末不要有空格
2)编码集的问题,如果在window上实在不行,可以上传到linux进行zip压缩,然后下载到windows上,再上传到azkaban上
(一)创建项目
- 登录 Azkaban 的 WebServer,进入管理界面。
- 点击 “Create Project” 按钮,创建一个新的项目。
- 输入项目名称、描述等信息,并选择项目的类型(如命令行任务、Java 任务等)。
Name 不能是中文的
Description 不能为空,可以是中文
(二)编写 job 任务
- 在项目中创建一个新的 job 文件,后缀为.job。
- job 文件的格式如下:
type=command
command=echo "hello world"
使用windows编辑这个文件的时候,一般要注意,格式,需要是unix:
(三)打包和上传
- 将编写好的 job 文件打包成 zip 格式,注意不能打包文件夹,只能打包文件。
- 在 Azkaban 的管理界面中,选择项目,点击 “Upload” 按钮,上传打包好的文件。
(四)错误修复
如果执行时报错
在exec-server中,修改配置文件 azkaban.proerties 添加如下代码,注意安装路径
azkaban.jobtype.plugin.dir=/opt/installs/azkaban/exec-server/plugins/jobtypes
重启exec-server即可。
(五)执行任务
- 在项目中选择要执行的任务,点击 “Execute” 按钮,启动任务的执行。
- 可以在任务的执行日志中查看任务的执行情况。
五、总结
Azkaban 是一个强大的任务调度和编排工具,它可以帮助我们轻松地组织和管理大数据任务,提高数据处理的效率和可靠性。本文介绍了 Azkaban 的简介、体系结构、安装步骤、使用方法等方面的内容,希望对大家有所帮助。