如何编译安装Azkaban服务

时间:2022-05-06
本文章向大家介绍如何编译安装Azkaban服务,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

Fayson的github:https://github.com/fayson/cdhproject

提示:代码块部分可以左右滑动查看噢

1.文档编写目的


Azkaban是一套简单的任务调度服务,是Hadoop工作流引擎调度器之一,整体包括三部分Web Server、DB Server、Executor Server。是LinkedIn的开源项目,开发语言为Java。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

Azkaban的部署方式有三种:

1.solo server mode: 即独立部署模块,数据库被嵌入H2,web服务器和执行服务器运行在同一个进程中,适用于小规模用例。

2.two server mode: 即两个服务器模式,数据库由主从设置的MySQL实例提供支持,Web服务器和执行服务器运行在不同的进程中,以便升级和维护不影响用户,适用于生成环境。

3.multiple executor mode: 即多个执行器模式,Web服务器和执行器理想情况下运行在不同的主机上,这种多主机设置为Azkaban带来了强大且可扩展性。

本篇文章主要基于two server mode模式介绍如何编译及安装Azkaban服务。

  • 内容概述

1.环境准备

2.配置及启停Azkaban服务

3.登录测试Azkaban功能

  • 测试环境

1.Redhat7.2

2.使用root用户操作

3.Azkaban版本为3.43.0

2.环境准备


该步骤主要下载Azkaban源码,编译源码,安装及初始化Azkaban的数据库。

1.配置Java环境变量,编辑/etc/profile文件,在文件末尾增加Java环境变量

export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar:$CLASSPATH

(可左右滑动)

保存配置文件,执行source /etc/profile命令使其生效

2.下载Azkaban源码,下载地址如下

wget https://codeload.github.com/azkaban/azkaban/tar.gz/3.43.0
tar –zxvf 3.43.0

(可左右滑动)

3.43.0压缩包解压后的目录为azkaban-3.43.0目录

3.编译Azkaban,进入azkaban目录执行如下命令进行编译

[root@ip-172-31-21-83 ~]# cd azkaban-3.43.0/
[root@ip-172-31-21-83 azkaban-3.43.0]# ./gradlew build

(可左右滑动)

命令执行成功显示如下:

命令执行完成后,会在各个模块的azkaban*/build/distributions目录下生成编译好的安装包,这里生成了tar.gz和zip类型的压缩包

[root@ip-172-31-21-83 azkaban-3.43.0]# pwd
/root/azkaban-3.43.0
[root@ip-172-31-21-83 azkaban-3.43.0]# ls */build/distributions/*

(可左右滑动)

4.将编译成功的azkaban-*.tar.gz压缩包拷贝至/opt/cloudera/azkaban/software目录下

[root@ip-172-31-21-83 azkaban-3.43.0]# mkdir -p /opt/cloudera/azkaban/software
[root@ip-172-31-21-83 azkaban-3.43.0]# scp */build/distributions/*.tar.gz /opt/cloudera/azkaban/software
[root@ip-172-31-21-83 azkaban-3.43.0]# ll /opt/cloudera/azkaban/software

(可左右滑动)

5.将/opt/cloudera/azkaban/software目录下的所有压缩包解压到/opt/cloudera/azkaban目录下,并重命名

[root@ip-172-31-21-83 software]# tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C ../
[root@ip-172-31-21-83 software]# tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ../
[root@ip-172-31-21-83 software]# tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../
[root@ip-172-31-21-83 software]# tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../
[root@ip-172-31-21-83 software]# tar -zxvf azkaban-hadoop-security-plugin-0.1.0-SNAPSHOT.tar.gz -C ../

(可左右滑动)

将解压的目录重名

[root@ip-172-31-21-83 azkaban]# mv azkaban-db-0.1.0-SNAPSHOT azkaban-db
[root@ip-172-31-21-83 azkaban]# mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec-server
[root@ip-172-31-21-83 azkaban]# mv azkaban-hadoop-security-plugin-0.1.0-SNAPSHOT azkaban-hadoop-security-plugin
[root@ip-172-31-21-83 azkaban]# mv azkaban-solo-server-0.1.0-SNAPSHOT azkaban-solo-server
[root@ip-172-31-21-83 azkaban]# mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web-server

(可左右滑动)

6.创建Azkaban数据库及初始化表结构

由于Azkaban目前只支持MySQL数据库,所以这里需要安装MySQL,具体的安装过程这里就不在描述了,需要修改MySQL的/etc/my.cnf文件,增加如下配置:

max_allowed_packet = 20M

(可左右滑动)

保存配置后,然后重启MySQL

[root@ip-172-31-21-83 ~]# systemctl restart mariadb
[root@ip-172-31-21-83 ~]# 

(可左右滑动)

使用root用户登录MySQL,执行如下命令创建Azkaban库及访问数据库的用户

create database azkaban default character set utf8;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON azkaban.* TO 'azkaban'@'%';
FLUSH PRIVILEGES;

(可左右滑动)

初始化Azkaban表结构,在上一步我们将Azkaban-db部署在/opt/cloudera/azkaban/azkaban-db目录下,在该目录下找到create-all-sql-0.1.0-SNAPSHOT.sql文件

在命令行执行如下命令导入SQL文件

mysql -uazkaban -p --database=azkaban < /opt/cloudera/azkaban/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql 

(可左右滑动)

验证表结构是否导入成功:

3.配置Azkaban-web-server


在前面环境准备阶段,Fayson已经将编译好的压缩包azkaban-web-server-0.1.0-SNAPSHOT.tar.gz部署/opt/cloudera/azkaban/目录下。

1.将/opt/cloudera/azkaban/azkaban-solo-server目录下的conf、plugins目录拷贝至/opt/cloudera/azkaban/azkaban-web-server目录下

[root@ip-172-31-21-83 azkaban]# scp -r azkaban-solo-server/conf/ azkaban-solo-server/plugins/ azkaban-web-server/
[root@ip-172-31-21-83 azkaban]# cd azkaban-web-server/
[root@ip-172-31-21-83 azkaban-web-server]# ll

(可左右滑动)

2.进入azkaban-web-server/conf目录下,修改azkaban.properties文件

该配置文件主要定义Azkaban-web-server服务的基本信息、数据库信息、监听端口、Executor设置以及插件目录配置等。

# Azkaban Personalization Settings
azkaban.name=CDH_Azkaban
azkaban.label=My CDH Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=password
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
# Azkaban Executor settings
executor.port=12321
# 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
viewer.plugin.dir=plugins/viewer

(可左右滑动)

3.azkaban-web-server/conf目录下的azkaban-users.xml文件主要定义登录用户账号密码及权限,这里我们使用默认的配置信息

<azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
<user password="metrics" roles="metrics" username="metrics"/>
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>

(可左右滑动)

4.在azkaban-web-server/conf目录下新增log4j.properties文件,内容如下:

[root@ip-172-31-21-83 conf]# vim log4j.properties
log4j.rootLogger=INFO,C
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.err
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

(可左右滑动)

5.在azkaban-web-server目录下执行如下命令创建目录

创建第三方依赖包部署目录extlib

mkdir /opt/cloudera/azkaban/azkaban-web-server/extlib

(可左右滑动)

创建服务日志存放目录logs

mkdir /opt/cloudera/azkaban/azkaban-web-server/logs

(可左右滑动)

创建azkaban-web-server服务的第三方插件视图目录与azkaban.properties配置文件中的viewer.plugin.dir配置路径一致

mkdir /opt/cloudera/azkaban/azkaban-web-server/plugins/viewer

(可左右滑动)

4.配置Azkaban-executor-server


在前面环境准备阶段,Fayson已经将编译好的压缩包azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz部署/opt/cloudera/azkaban/目录下。

1.将/opt/cloudera/azkaban/azkaban-solo-server目录下的conf、plugins目录拷贝至/opt/cloudera/azkaban/azkaban-exec-server目录下

[root@ip-172-31-21-83 azkaban]# cd azkaban-solo-server/
[root@ip-172-31-21-83 azkaban-solo-server]# scp -r conf/ plugins/ /opt/cloudera/azkaban/azkaban-exec-server/

(可左右滑动)

2.在azkaban-exec-server/conf目录下修改azkaban.properties文件,内容如下:

该配置文件主要定义Azkaban-exec-server服务的基本信息、数据库信息、监听端口及插件目录配置等。

# Azkaban Personalization Settings
default.timezone.id=Asia/Shanghai
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=password
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes

(可左右滑动)

3.在conf目录下新增log4j.properties配置文件内容如下

[root@ip-172-31-21-83 conf]# vim log4j.properties
log4j.rootLogger=INFO,C
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.err
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

(可左右滑动)

4.在azkaban-exec-server目录下执行如下命令创建目录

创建第三方依赖包部署目录extlib

mkdir /opt/cloudera/azkaban/azkaban-exec-server/extlib

(可左右滑动)

创建服务日志存放目录logs

mkdir /opt/cloudera/azkaban/azkaban-exec-server/logs

(可左右滑动)

创建azkaban-exec-server服务的第三方插件目录与azkaban.properties配置文件中的azkaban.jobtype.plugin.dir配置路径一致

5.启停Azkaban的Executor和Web服务


这里在启停服务的时候需要注意,如果直接进入到相应服务的bin目录下启动会导致服务启动时找不到相应的配置文件,所以我们需要在相应服务的HOME目录执行命令启停服务。

1.启停Azkaban-executor服务执行如下命令

cd /opt/cloudera/azkaban/azkaban-exec-server/
bin/azkaban-executor-shutdown.sh #停止azkaban-executor服务
bin/start-exec.sh   #启动azkaban-executor服务并输出日志到logs目录

(可左右滑动)

查看Azkaban-executor服务的log

有如上截图显示,则表示Azkaban executor服务启动成功。

2.启停Azkaban-web服务执行如下命令

cd /opt/cloudera/azkaban/azkaban-web-server/
bin/azkaban-web-shutdown.sh   #停止Azkaban-web服务
bin/start-web.sh    #启动Azkaban-web服务并输出日志到./logs目录

(可左右滑动)

查看web服务的log日志

有如上日志显示则表示Azkaban Web服务启动成功。

6.Azkaban访问及测试


1.在浏览器输入http://${hostname}:8081访问web界面,输入用户名和密码,在Azkaban-web-server/conf目录的azkaban-users.xml配置文件中,默认为azkaban/azkaban

登录成功后显示主页如下

2.创建一个test-azkaban工程

3.创建两个测试脚本

在本地创建foo.job文件,内容如下:

# foo.job
type=command
command=echo foo

(可左右滑动)

在本地创建bar.job文件,内容如下:

# bar.job
type=command
dependencies=foo
command=echo bar

(可左右滑动)

bar.job作业依赖foo.job作业,将两个文件压缩为zip包

4.上传job压缩包

5.运行工作流

点击“Executor”执行

如上图所示可以看到作业执行成功。

7.常见问题汇总


1.azkaban-web-server服务启动正常,访问服务的web界面是报如下异常

java.lang.RuntimeException: JarResourceLoader : JAR path must start with jar: -> see java.net.JarURLConnection for information 
    at org.apache.velocity.runtime.resource.loader.JarResourceLoader.loadJar(JarResourceLoader.java:143) 
    at org.apache.velocity.runtime.resource.loader.JarResourceLoader.init(JarResourceLoader.java:118) 
    at org.apache.velocity.runtime.resource.ResourceManagerImpl.initialize(ResourceManagerImpl.java:143) 
    at org.apache.velocity.runtime.RuntimeInstance.initializeResourceManager(RuntimeInstance.java:730) 
    at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:263) 
    at org.apache.velocity.runtime.RuntimeInstance.requireInitialization(RuntimeInstance.java:302) 
    at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1531) 
    at org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:343) 
    at azkaban.webapp.servlet.Page.render(Page.java:67)

(可左右滑动)

异常原因:在azkaban-web-server服务没有安装viewer plugin时可能会导致该异常

解决方法:在plugins/viewer目录下添加插件即可。

异常参考:https://github.com/azkaban/azkaban/issues/327

8.总结


  • Azkaban安装部署前需要自己编译,根据生产环境作业调度情况来选择不通的部署模式
  • Azkaban默认支持Java、Command和Linux命令

提示:代码块部分可以左右滑动查看噢

为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操