azkaban3.9.0的编译安装步骤

本篇内容介绍了“azkaban3.9.0的编译安装步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目前创新互联建站已为数千家的企业提供了网站建设、域名、网页空间、网站托管运营、企业网站设计、镇沅网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

1 Azkaban介绍

大数据业务处理场景中,经常有这样的分析场景:
A 任务:将收集的数据通过一系列的规则进行清洗,然后存入 Hive 表 a 中。
B 任务:将 Hive 中已存在的表 b 和表 c 进行关联得到表 d 。
C 任务:将 A 任务中得到的表 a 与 B 任务中得到的表 d 进行关联得到分析的结果表e 。
D 任务:最后将 Hive 中得到的表 e 通过 sqoop 导入到关系型数据库 MySQL 中供web 端查询使用。
显然,以上任务 C 依赖于任务 A 与任务 B 的结果,任务 D 依赖于任务 C 的结果。我们一般的做法可以打开两个终端分别执行任务 A 与任务 B ,当任务 A 与任务 B 执行完成之后再执行任务 C ,当任务 C 执行完成之后再执行任务 D 。整个任务流程中必须保证任务A 、任务 B 执行完成之后执行任务 C ,然后再执行任务 D 。这样某一个环节都离不开人工的参与,需要时刻盯着各任务的执行进度,非常费力。
以上业务场景就是一个大的任务,任务中分为四个子任务 A 、 B 、 C 、 D ,如果能有一个任务调度器给我们自动实现执行任务 A ,执行任务 B ,然后再执行任务 C ,最后执行任务D ,那么就不需要人工时刻盯着任务是否执行完成,是否该开启下一个任务。 Azkaban 就是这样一个工作流的调度器,可以解决以上场景问题。
2 Azkaban 的安装
2.1 Azkaban 由三个关键组件

Azkaban 是一个批量工作流调度器,底层是使用 java 语言开发,用于在一个工作流内以一定的顺序运行一组任务和流程,并且提供了非常方便的 webui 界面来监控任务调度的情况,方便我们来管理流调度任务。
Azkaban 由三个关键组件组成:

    AzkabanWebServer:
    主要负责项目管理、用户登录权限认证、定时执行工作任务、跟踪提交任务执行的流程、访问历史执行任务、保存执行计划的状态。
    AzkabanExecutorServer:主要负责工作流程的提交、执行、检索和更新当前正在执行计划的数据,处理执行计划的日志。
    关系型数据库:
    主要是保存工作流中的原数据信息。
    下面,让我们从零开始搭建一个 Azkaban 任务流调度系统。

2.2 安装Azkaban

https://github.com/azkaban/azkaban/releases
2.2.1 环境准备

在 Linux 中安装 Azkaban ,系统中需要安装好 jdk,MySQL ,这里选择的是 jdk8和 MySQL5.1 版本。除此之外,还需要安装 git , git 是一个开源的分布式版本控制系统,一般在项目版本控制中会使用 git 控制,这里安装 Azkaban 需要 git 是因为需要通过 git 构建依赖包。
安装git:

yum -y install git

2.2.2 安装 Azkaban

    上传下载好的 azkaban ,解压到 /opt/azkaban-temp 文件夹

 [root@mynode5 software]# tar -zxvf ./azkaban-3.90.0.tar.gz
 [root@mynode5 software]# mv ./azkaban-3.90.0 azkaban-temp

    进入 azkaban-temp 目录,进行编译

 [root@node4 azkaban]# ./gradlew distTar
 ...
  BUILD SUCCESSFUL in 4m 6s
  54 actionable tasks: 40 executed, 14 from cache

注意:编译过程中有可能由于网络延时造成编译时失败,可以多重试几次解决此问题。
3. 新建 azkaban 目录,将编译好的文件复制到此目录下

[root@node4 software]# mkdir ./azkaban
[root@node4 software]# cd azkaban
[root@node4 azkaban]# cp /software/azkaban-temp/azkaban-
db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz
/software/azkaban4.
[root@node4 azkaban]# cp /software/azkaban-temp/azkaban-web-
server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
/software/azkaban
[root@node azkaban]# cp /software/azkaban-temp/azkaban-exec-
server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
/software/azkaban

    在 azkaban 目录下解压各个编译好的压缩包,重新命名

[root@node4 azkaban]# tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz
[root@node4 azkaban]# tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
[root@node4 azkaban]# tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
[root@node4 azkaban]# mv azkaban-db-0.1.0-SNAPSHOT azkaban-db
[root@node4 azkaban]# mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web
[root@node4 azkaban]# mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec

至此,经历了 Azkaban 的下载、编译, Azkaban 安装基本准备工作已经完成,下一步就是配置 Azkaban ,将 Azkaban 运行起来。
2.2.3 导入数据库

运行 Azkaban 基本的原数据信息库,在编译好的 azkaban-db 中就有基本的库信息,需要将这些数据导入到关系型数据库中,这里就是导入 MySQL 数据库中 , 导入的MySQL 数据库可以和当前 Azkaban 安装在同一节点上,也可以安装在不同的节点上,笔者的 Azkaban 安装在 node4 节点上, MySQL 数据库安装在 node1 节点上。

    登录 mysql 数据库,创建 azkaban 数据库

[root@mynode2 ~]# mysql -u root -p
 mysql> create database azkaban default character set latin1;

注意:这里创建 azkaban 时建议使用 latin1 编码,因为索引太长, utf8 编码格式不支持,最高支持 1000 。
2. 准备 sql 文件
将 node4 节点上 /software/azkaban/azkaban-db 目录下的 create-all-sql-0.1.0-SNAPSHOT.sql 复制到 node1 节点 /software/test 目录下。

[root@node4 azkaban-db]# scp /software/azkaban/azkaban-db/create-all-
sql-0.1.0-SNAPSHOT.sql
[root@node4:/software/test create-all-sql-0.1.0-SNAPSHOT.sql 100% 12KB 11.8KB/s 00:00

  向 MySQL 中导入数据库

 mysql> use azkaban;
 mysql> source /software/test/create-all-sql-0.1.0-SNAPSHOT.sql

     检查导入的数据库表

mysql> show tables;

2.3 配置运行 Azkaban
2.3.1 创建 ssl 配置

HTTP 的全称 是 Hypertext Transfer Protocol Vertion (超文 本传输协议), HTTPS 的全称是 Secure Hypertext Transfer Protocol (安全超文本传输协议), HTTPS 基于 HTTP 开发,使用安全套接字层 (SSL) 进行信息交换,简单来说它是HTTP 的安全版。 Azkaban 支持安全的 https 访问,但是需要创建 ssl 配置。
在 /software/azkaban 目录下执行命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA 创建 ssl 配置。

[root@mynode5 azkaban]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
输入密钥库口令:
再次输入新口令:
输入 的密钥口令
(如果和密钥库口令相同, 按回车):

输入完信息,执行完以上命令之后,在当前目录下生成一个 keystore 文件,将此文件复制到 azkaban web 服务器根目录下。

 [root@node4 azkaban]# mv /software/azkaban/keystore /software/azkaban/azkaban-web

2.3.2 Azkaban web 服务器配置

进 入 /software/azkaban/azkaban-web/conf 目 录 下 , 编 辑azkaban.properties 文件:

[root@node4 conf]# cd /software/azkaban/azkaban-web/conf/
[root@node4 conf]# vim azkaban.properties

编辑内容如下:

# Azkaban Personalization Settings
azkaban.name=My Azkaban
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/root/soft/azkaban/azkaban-web/web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/root/soft/azkaban/azkaban-web/conf/azkaban-users.xml
# Loader for projects
executor.global.properties=/root/soft/azkaban/azkaban-web/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
jetty.keystore=/root/soft/azkaban/azkaban-web/keystore
jetty.password=123456
jetty.keypassword=azkaban
jetty.truststore=/root/soft/azkaban/azkaban-web/keystore
jetty.trustpassword=123456
jetty.ssl.port=8443
executor.connector.stats=true
executor.port=12312
# 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.3.175
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
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

2.3.3 Azkaban executor 服务器配置

进 入 /software/azkaban/azkaban-exec/conf 目 录 下 , 编 辑azkaban.properties 文件:

# Azkaban Personalization Settings
azkaban.name=My Azkaban
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/root/soft/azkaban/azkaban-web/web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/root/soft/azkaban/azkaban-web/conf/azkaban-users.xml
# Loader for projects
executor.global.properties=/root/soft/azkaban/azkaban-web/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=https://localhost:8443
# 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=/root/soft/azkaban/azkaban-exec/plugins/jobtypes
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=192.168.3.175
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
executor.port=12321

2.3.4 启动 Azkaban

    启动 AzkabanExecutorServer
    进入 /software/azkaban/azkaban-exec/bin 目录,启动AzkabanExecutorServer , jps 检查进程 , 出现AzkabanExecutorServer进程表示启动成功。

 [root@node4 bin]# cd /software/azkaban/azkaban-exec/bin
 [root@node4 bin]# ./start-exec.sh
 [root@node4 bin]# jps

    激活 AzkabanExecutor
    启动/重启 AzkabanExecutor 需要激活,在浏览器中执行如下命令,激活
    AzkabanExecutor :

 http://node4:12321/executor?action=activate

    启动 AzkabanWebServer
    进入 /software/azkaban/azkaban-web/bin 目录,启动
    AzkabanWebServer,jps 检查进程,出现 AzkabanWebServer 进程表示启动成功。

 [root@node4 bin]# cd /software/azkaban/azkaban-web/bin
 [root@node4 bin]# ./start-web.sh

3. [root@mynode5 bin]# jps

至此, Azkaban 的搭建已经完成,下面检查 Azkaban 运行情况。
2.4 验证 Azkaban 运行情况

验证 Azkaban 是否启动成功,可以访问 Azkaban 的 WebUI 界面,检查是否启动成功。在浏览器输入 http://node4:8081:
如果配置了ssl请访问:https//node4:port
在这里插入图片描述

输入地址之后,出现以上页面表示配置 Azkaban 没有问题,Azkaban 启动成功,默认的用户名和密码都是 Azkaban ,可以输入用户名和密码登录 Azkaban 的界面提交任务流,进行任务管理和调度。:
在这里插入图片描述

至此, Azkaban 搭建成功,下面我们模拟一个任务流来尝试利用 Azkaban 来进行任务调度。
3. 构建工作流

以上小节介绍了安装部署 Azkaban ,本节中我们将设计一个模拟的任务流程 flow ,通过这个任务流程来学习如何编写 Azkaban 的任务、如何在 WebUI 中查看任务流调度及状态。
首先介绍下 Azkaban 中 project 、 flows 、 job 之间的关系:一个 project 中可以包含一个或者多个 flows ,一个 flows 包含多个 job 。这里的 job 是在 Azkaban 中运行的一个进程,可以是简单的 linux 命令、 shell 脚本、 sql 脚本等。一个 job 可以依赖于另一个 job ,这种多个 job 之间的依赖关系组成 flow ,也就是任务流。
3.1 设计工作流程

假设现在有 5 个 job ,分别是 job1 、 job2 、 job3 、 job4 、 job5 。每个 job 都执行一个 shell 脚本。 job3 依赖与 job1 和 job2 执行的结果, job4 依赖于 job3 执行的结果, job5 依赖于 job4 执行的结果。
针对以上这个任务需求,我们可以设计一个任务流( flow ),这个任务流中有 5 个job ,按照上述 job 依赖的关系,可以编写一个简单的任务流程提交到 Azkaban 中进行调度执行。
3.2 编写各阶段 Job

编写 job 非常容易,需要创建一个以” .job ”结尾的文本文件,文件中书写格式如下:

type=command
command= 需要执行的脚本或命令

type=command 是 告 诉 Azkaban 使 用 unix 原 生 命 令 去 运 行 命 令 或 者 脚 本 ,command= “ xxx ”就是指定当前 job 需要执行的命令或者脚本,如果当前 job 依赖于其他的 job ,只需要在这个文本文件后面加上“ dependencies= 依赖的 job 名称”即可,依赖的 job 只需要写名称,不需要写出后缀“ job ”。
为了方便演示以上工作流程,这里设计的每个 job 都调起 linux 上的一个脚本,脚本中就使用简单的 echo 打印一些信息供参看 ,5 个 job 及对应的脚本设置内容如下:

    编写 job 任务
    job1.job:

type=command
command= sh job1.sh

job2.job :

type=command
command= sh job2.sh

job3.job:

type=command
command= sh job3.sh
dependencies=job1,job2

job4.job:

 type=command
 command= sh job4.sh
 dependencies=job3

job5.job:

 type=command
 command= sh job5.sh
 dependencies=job4

以上 job 任务的编写可以在本地 window 环境中编写,编写完成后需要将 5 个 job
压缩到一个压缩文件中,后期提交到 Azkaban 中执行。
2. 编写脚本内容

job1.sh:

echo "开始执行 job1... ... "
echo "正在执行 job1... ... "
echo "执行完成 job1... ... "

job2.sh:

echo "开始执行 job2... ... "
echo "正在执行 job2... ... "
echo "执行完成 job2... ... "

job3.sh:

echo "开始执行 job3... ... "
echo "正在执行 job3... ... "
echo "执行完成 job3... ... "

job4.sh:

echo "开始执行 job4... ... "
echo "正在执行 job4... ... "
echo "执行完成 job4... ... "

job5.sh:

echo "开始执行 job5... ... "
echo "正在执行 job5... ... "
echo "执行完成 job5... ... "

以 上 脚 本 是 在 linux 中 编 写 , job1.sh 、 job2.sh 、 job3.sh 、 job4.sh 、job5.sh 几个脚本都需要赋予执行权限。
3.3 配置工作流并执行

Azkaban 中任务提交时,必须将所有 job 文件压缩到一个 zip 文件中再提交到
Azkaban 中执行。首先将以上 5 个 job 压缩到一个 zip 文件中,然后登陆 Azkaban, 点
击右上角的 Create Project 创建一个项目:
在这里插入图片描述

在弹出的框中填写项目名称及项目描述:

在这里插入图片描述
点击 Create Project ,点击 upload ,上传压缩好的任务:
在这里插入图片描述
上传完成之后,查看任务流, Azkaban 默认 Flow 名称是以最后一个没有依赖的 job定义的:
在这里插入图片描述
点击 Execute Flow 可以看到任务流的详细依赖关系:
在这里插入图片描述
点击 Execute 执行任务。
如果想要每隔一段时间执行一次任务,可以点击 Schedule ,配置定时任务,配置好时间之后,点击 Schedule 调度即可。如图示:
在这里插入图片描述
3.4 工作流执行监控

执行任务完成之后,会自动跳转到执行成功界面:
在这里插入图片描述
3.5 Azkaban 问题

如果在提交 Azkaban 时出现任务一直运行状态,但是执行不完成,查看 azkabanwebui 日 志 发 现 “ Cannot request memory (Xms 0 kb, Xmx 0 kb) from system for job job1, sleep for 60 secs and retry, at… … ”问题,这个问题是 executor 执行任务之前检查节点内存是否足够 3G ,如果不够就会出现这个错 误 。 可 以 在 …/azkaban-exec/plugins/jobtype 目 录 下 , 配 置commonprivate.properties 文 件 , 在 文 件 中 加 入“ memCheck.enabled=false ”,不检查内存即可,重启 azkaban 就可。

“azkaban3.9.0的编译安装步骤”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网站栏目:azkaban3.9.0的编译安装步骤
网站URL:http://myzitong.com/article/jhdess.html