手把手教你安装 azkaban 运行环境

  1. 背景
  2. 简介
  3. 资料下载
  4. MySQL 安装
  5. Jdk 安装
  6. azkabn-web 安装
  7. azkaban-executor 安装
  8. 启动测试
  9. 踩坑记录

1. 背景

最近项目上需要搭建一个任务调用框架,在对比了市面上一些常用的调度框架比如QuartzElastic Jobxxl-job 以及 azbakan 之后,在综合考虑了易用性,学习成本,以及在公司其他项目中已经使用了azbakan 之后,决定使用 azbakan 作为这个项目的任务调度框架。

确定了使用 azbakan 作为任务调度框架之后,就需要搭建它的一个运行环境,这篇文章就用来详细记录azbakan的一个安装过程。

2. 简介

azkanban 是LinkedIn公司开发的、用于解决Hadoop任务依赖问题的一套实现方案。简单来说我们有许多的定时任务需要运行,这些任务有的是有依赖顺序的,比如 B 任务的运行需要依赖 A 任务的运行结果,C 任务需要依赖 B 任务的运行结果等。那么使用 azkaban 就很容易的实现,只需要在job配置文件中添加任务之间的依赖关系,剩下交给 azkaban 就行了。

3. 资料下载

azkaban 分为三部分:

  1. MySQL
  2. AzkabanWebServer
  3. AzkabanExecutorServer
  • MySQL 主要的用来存储上传的任务文件,保存任务的执行状态和存储任务日志等。
  • AzkabanWebServer 负责工程管理、用户认证、任务调度和监控。我们开发好的任务,通过web提供的页面上传到AzkabanWebServer上即可调度运行任务。
  • AzkabanExecutorServer 主要服务任务的提交,执行等。

azkaban 目前最新的版本为3.0,我这次使用的是2.5的版本,安装方式也有两种,一种是通过源码编译安装,一种是通过压缩包解压安装。我这次通过压缩包解压的方式进行安装,所需的资料如下:
在这里插入图片描述

其中 create-all-sql-2.5.0.sql 为 azkaban 的 SQL 脚本,是一些建表语句。jdk-8u161-linux-x64.tar.gz 是jdk安装包,因为 azkaban 的运行需要依赖 jdk,mysql-connector-java-8.0.16.jar 是mysql驱动。

这些资料关注【Java技术编程】公众号后发送【azkaban】即可免费获取

azkaban 提供三种安装模式:

  • 单个独立应用 “solo-server”模式,
  • 相对重量级点的双服务器模式( two server mode)
  • 分布式的多执行器模式( multiple-executor mode )。

在 solo server mode 模式下,DB使用嵌入式H2数据库,并且 web 服务与 executor 服务运行在同一个进程中。

two server mode 。web 服务和 executor 服务最好是运行在不同的主机上,用于要求更高的生产环境。

multiple executor mode 用于要求最高的生产环境。数据库存储要使用主从模式的 MySQL 实例。web 服务和 executor 服务要运行在不同的主机上。

本次安装的是双服务器模式( two server mode),用的是阿里云的服务器进行安装。

4. 安装MySQL

第一步首先需要安装mysql,由于该篇文章主要用来详细记录azkaban的安装步骤,所以安装mysql不是本文的重点,我也是按照网上的教程进行安装的。

mysql 成功安装后,进行登陆:

mysql -u root -p 回车之后,输入密码

在这里插入图片描述
创建一个数据库共azkaban使用,你也可以在创建一个用户,我这里就直接使用 root 用户了。

mysql> CREATE DATABASE azkaban;

在这里插入图片描述

执行脚本,创建对应的表结构:

mysql> use azkaban
mysql> source /root/mysql/create-all-sql-2.5.0.sql

如下所示:

在这里插入图片描述

执行成功后,查看表是否创建成功:

mysql> show tables

在这里插入图片描述

踩坑:如果这里你也是用阿里云服务器安装mysql,你会发现在服务器上可以连接mysql服务,但是使用navcat等客户端工具连接不上的时候,你可以到阿里云服务器控制台添加一条防火墙规则,把3306端口打开就可以了,具体操作可参考我上篇文章:https://tsmyk0715.blog.csdn.net/article/details/112924076

5. JDK 安装

首先把 jdk 安装包 jdk-8u151-linux-x64.tar.gz 复制到 /usr/lib/jdk 目录下。

解压:

tar -zxvf jdk-8u151-linux-x64.tar.gz

如下所示:
在这里插入图片描述

配置环境变量:

vim /etc/profile

添加如下内容
export JAVA_HOME=/usr/lib/java
export PATH=$JAVA_HOME/bin:$PATH

使环境变量生效

. /etc/profile

验证环境:

java -version
java
javac

6. azkabn-web 安装

解压:

tar -zxvf azkaban-web-server-2.5.0.tar.gz

在这里插入图片描述

其中:

  • bin:存放启动脚本
  • conf:存放配置文件
  • extlib:扩展包
  • lib:依赖包
  • plugins:插件
  • web:web相关的js,css等。

拷贝jdbc驱动:

使用 cp 命令把mysql的驱动拷贝到 extlib 目录下:

在这里插入图片描述

生成keystore文件:

Azkaban 使用 SSL 套接字连接,即启用SSL,访问时使用 https 进行访问,要求必须有一个可用的密钥库。

keystore 是 jdk 提供的一个工具,可以直接在安装jdk服务器上生成,也可以在window系统生成,如果在 window 下生成,则需要使用管理员模式打开 cmd控制台,进入到jdk安装下的bin目录下执行命令。

我是在window本地生成的,步骤如下:

以管理员模式打开 cmd 控制台,进入到jdk安装下的bin目录下,执行如下命令:

keytool -keystore keystore -genkey -keyalg RSA

按照提示输入密码等信息即可生成keystore.

在这里插入图片描述

执行成功后,在当前目录下即可看到生成的 keystore 文件,把该文件上传到服务器指定的目录即可。

修改配置文件:

进入到 conf目录下,该目录下有两个配置文件:

在这里插入图片描述

  • azkaban.properteis - Azkaban 的运行时参数,是必需的主配置文件。
  • azkaban-users.xml - 添加用户和角色供认证使用。若 XmlUserManager 没有设置使用该文件,则其不会被用到。
azkaban.properteis 配置文件如下:

azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
# web 页面地址,注意这里必须是绝对路径,不然页面展示不正常
web.resource.dir=/root/azkaban/azkaban-web-server/azkaban-web-2.5.0/web/
# 时区
default.timezone.id=Asia/Shanghai

#用户管理设置,使用默认的账户和角色,可以自定义实现
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/root/azkaban/azkaban-web-server/azkaban-web-2.5.0/conf/azkaban-users.xml

# 数据库相关配置
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100

# keystore 相关配置,启用 SSL,使用https访问
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
# keystore 绝对路径
jetty.keystore=/root/azkaban/azkaban-web-server/azkaban-web-2.5.0/conf/keystore
# 生成keystore时输入的密码
jetty.password=123456
jetty.keypassword=123456
jetty.truststore=/root/azkaban/azkaban-web-server/azkaban-web-2.5.0/conf/keystore
jetty.trustpassword=123456


# Executor 的端口号,需要和 azkaban-executor 下的配置文件里面配置的一致
executor.port=12321

# 邮件相关配置
mail.sender=
mail.host=
job.failure.email=
job.success.email=

启动

到这里,azkaban-web-server 就安装完成了,现在进入到 bin 目录下,执行如下命令进行启动:

sh azkaban-web-start.sh

如果出现如下所示,则表示启动成功:

在这里插入图片描述

执行如下命令查看对应的进程:

ps -ef | grep azkaban-web-server 

在这里插入图片描述

7. azkaban-executor 安装

azkaban-executor 安装就比较简单了。

解压

tar -zxvf azkaban-executor-server-2.5.0.tar.gz

在这里插入图片描述
每个目录的作用和 azkaban-web的一致。

使用 cp 命令把mysql的驱动拷贝到 extlib 目录下:
在这里插入图片描述

修改配置文件

进入到 conf目录下,该目录下有三个配置文件:

在这里插入图片描述

  • global.properties 全局静态参数,每个工作流和任务都共享其中的配置
  • azkaban.private.properties 私有配置文件,可以用来配置密码之类的,
  • azkaban.properties 主配置文件
azkaban.properties 配置文件如下:

#时区
default.timezone.id=Asia/Shanghai

# JobTypes 插件的路径
azkaban.jobtype.plugin.dir=plugins/jobtypes

#global.properties的路径
executor.global.properties=conf/global.properties
azkaban.project.dir=projects

# 数据库配置
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban2
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

executor.maxThreads=50
# Executor的端口,这个需要和 executor-web保持一致
executor.port=12321
executor.flow.threads=30

启动

到这里 azkaban-executor-server 就安装完成了,现在进入到 bin 目录下,执行如下命令进行启动:

 sh azkaban-executor-start.sh

如果出现如下所示,则表示启动成功:

在这里插入图片描述

执行如下命令查看对应的进程:

ps -ef | grep azkaban-executor-server

在这里插入图片描述

到这里 azkaban 运行环境就安装完毕了,接下来页面访问看一下吧。

启动测试

先执行如下命令查看服务是否正常:

ps -ef | grep azkaban

在这里插入图片描述

可以看到服务都是正常的,在浏览器中输入 https://ip:8443 即可访问 azkaban 的web页面:

在这里插入图片描述

默认用户名和密码都是 azkaban,登陆之后如下所示:

在这里插入图片描述

踩坑记录

到这里就结束了,在安装的过程中也踩到了一些坑,如下所示:

1. mysql 安装成功后服务器可以连接,navcat不能连接

这是因为使用的是阿里云的服务器进行安装,而服务器默认只会对外开放 80,443,22 端口,就需要在控制台配置开放3306端口,具体操作可以参考上篇文章:https://tsmyk0715.blog.csdn.net/article/details/112924076

2. conf/azkaban-users.xml doesn’t exist

在启动 azkaban-web 服务的时候,会提示azkaban-users.xml文件不存在,这是因为在azkaban.properties配置文件中azkaban-users.xml配置的是相对路径,需要改为绝对路径

3. 访问azkaban的web页面,页面样式混乱

当访问azkaban的web页面时,页面不能正常展示,出现如下所示:

在这里插入图片描述

这是因为在 azkaban-web-server 下的azkaban.properties配置文件中web目录配置成了相对目录,需要改为绝对目录:

web.resource.dir=/root/azkaban/azkaban-web-server/azkaban-web-2.5.0/web/

4. 输入 https://ip:8443 之后,页面不能访问

浏览器地址栏输入 https://ip:8443 之后,出现如下画面:

在这里插入图片描述

这是和navcat不能链接mysql一样的原因,阿里云服务器默认没有开放 8443 端口,需要手动添加,添加了之后,就可以访问了,如下所示:

在这里插入图片描述

ps: 本文首发于个人技术公众号【Java技术编程】,欢迎关注。

下篇文章将会开发一个定时任务,上传到azkaban中运行,敬请期待。

往期精彩回顾

Vue加载优化,速度提高一倍。

公众号开发:获取用户消息和回复消息

Ribbon 负载均衡器 LoadBalancer 源码解析

Redis 数据结构-字典源码分析

Redis 数据结构-字符串源码分析

国产达梦数据库与MySQL的区别

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值