Azkaban 3.50环境搭建遇坑

Azkaban 3.50环境搭建遇坑来由

由于笔者工作原因,好久没有更新博客,深表歉意。
由于最近接到公司领导要求,需要了解大数据相关技术,由于在学习工程中遇坑无数,也有好多是笔者技术层次原因,总之遇见很多问题,解决方法无非是通过网上查找资料,所以便捡起了博客,将自己遇到的问题做个总结,以便之后查找,如果碰巧能解决网友问题,则更好。
这几天笔者在研究大数据技术的同事发给了笔者一份代码,代码主要功能就是实现任务调度,也就业内常见的任务调度系统
可是,该项目中使用的调度系统有一些不足,于是乎笔者遍开始寻找有没有比较友好的开源调度系统,当然是与hadoop有关的。
在笔者的查看的资料中有些网友提到了Azkaban这开源调度系统,也可以称之为hadoop流程管理系统,当然,其主要的目的就是实现hadoop作业(job)间的衔接。当然了比较出名的软件还有Oozie等。这里笔者为了选型,则先试用下Azkaban。

万事开头难,Azkaban的环境搭建就用了笔者近2天的时间,这期间遇到的问题还真不少,这在搭建完成后,变抓紧将这过程记录下来,用来记录这痛苦的回忆。

地址

Azkaban 的相关历史就自行百度,google吧,这里我们只要知道它的代码都在GitHub上就可以了。现在的GitHub地址是https://github.com/azkaban/azkaban。

当笔者打开该GitHub的主页,看到最下面介绍时就慌得一批,NND现在的开源软件都需要自己编译么,这能不能编译成功可就是另一回事了。于是笔者查看了Oozie的cdh5版本,得了也得自行编译。此处省略一万字,想用开源的软件可不是那么容易。

工程编译

编译是个痛苦的事情,Azkaban需要用gradle编译,还好官方已经给出了编译整个项目的gradlew.bat文件,文件笔者没有阅读,大概的功能就是为你搭建gradle编译的版本,当然它也会去下载相应的gradle版本的软件包。就是这么简单的自动化编译,笔者也遇到坑,那就是网络问题,唉,笔者不得不说国内的网络真是XX。这个下载至少100M,但是经历了一下午,笔者的CMD窗口下载一直断掉,唉,最后没办法,只能讲需要的gradle-4.6-all.zip包单独下载,放到gradlew.bat下载gradle的位置。如果你是gradle大神。那就自行的编译他的项目吧。

gradle环境准备好后,那就按照Azkaban里的README.md里介绍的编译命令来编译这个项目吧。使用

# Build and install distributions
./gradlew installDist

这个命令,一般不会遇到编译问题,如果提示找不到MAVEN里jar包,那只能说是网络问题,可以重试几次。

编译后,主要用到

这2个文件夹,分别是web服务器和exec作业执行服务器。官方文档给出了3种模式

  • alone “solo-server” mode 单独模式,供简单测试使用
  • the heavier weight two server mode 双服务模式
  • distributed multiple-executor mode 分布式模式

笔者采用第二种模式开始搭建,注意,这里需要mysql数据库作为支持库,官方也有说明支持最好的应该就是mysql数据。mysql的初始化sql可以在azkaban-db工程里找到。

搭建遇到的一些坑:

1.编译后的文件结构与官方文档结构不一致。

azkaban-web-server与azkaban-exec-server文件夹在编译后都会生成install文件夹,我们这里使用install文件夹里的内容做部署就可以,但是在install文件夹下安装主目录下缺少了上图的conf,extlib,plugins目录,需要手动创建。

2.缺少配置文件:

创建后还需要添加配置文件。配置文件在conf目录下。

azkaban-web-server主要有以下三个配置文件:

-rw-rw-r–. 1 hadoop hadoop 1805 Jul 25 23:44 azkaban.properties
-rw-rw-r–. 1 hadoop hadoop 268 Jul 25 23:36 azkaban-users.xml
-rw-rw-r–. 1 hadoop hadoop 644 Jul 25 23:37 log4j.properties

这三个文件的模板都可以在azkaban-solo-server这个工程里找到。需要修改就是azkaban.properties配置文件。

添加或修改以下内容:

jetty.keystore=keystore
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password

database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml

jetty.maxThreads=25
jetty.ssl.port=8443

azkaban-exec-server需要2个配置文件:

-rw-rw-r–. 1 hadoop hadoop 242 Jul 25 22:03 azkaban.properties
-rw-rw-r–. 1 hadoop hadoop 976 Jul 25 22:16 log4j.properties

修改azkaban.properties文件:

database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

安装包都已经整理好,将安装包上传服务器。

启动程序分别在2个工程的bin目录下,这里需要修改bin目录下internal的以internal开头的sh脚本的权限为777,不然会提示脚本没有权限。

3.启动问题:

如果启动后日志里出现

could not find or load main class

错误,则可能是编译过程中存在问题,将工程重新编译再重新部署。

总结:

log4j配置文件一定配置输出文件,出现问题,首先查看输出日志,笔者也是通过网友及日志分析才将环境搭建起来。