@zhangyy
2019-02-19T13:24:18.000000Z
字数 7798
阅读 95
协作框架
- 一:Azkaban的介绍
- 二:编译环境准备
- 三:测试服务
Azkaban是一套简单的任务调度服务,是Hadoop工作流引擎调度器之一,整体包括三部分Web Server、DB Server、Executor Server。是LinkedIn的开源项目,开发语言为Java。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
它有如下功能特点:
Web用户界面
方便上传工作流
方便设置任务之间的关系
调度工作流
认证/授权(权限的工作)
能够杀死并重新启动工作流
模块化和可插拔的插件机制
项目工作区
工作流和任务的日志记录和审计
Azkaban的部署方式有三种:
1.solo server mode: 即独立部署模块,数据库被嵌入H2,web服务器和执行服务器运行在同一个进程中,适用于小规模用例。
2.two server mode: 即两个服务器模式,数据库由主从设置的MySQL实例提供支持,Web服务器和执行服务器运行在不同的进程中,以便升级和维护不影响用户,适用于生成环境。
3.multiple executor mode: 即多个执行器模式,Web服务器和执行器理想情况下运行在不同的主机上,这种多主机设置为Azkaban带来了强大且可扩展性。
系统: CentOS7.5x64
jdk: jdk1.8.0_162
CDH版本:CDH5.15
Azkaban: 3.43.0
wget https://codeload.github.com/azkaban/azkaban/tar.gz/3.43.0
tar -zxvf 3.43.0
cd azkaban-3.43.0/
./gradlew build
命令执行完成后,会在各个模块的azkaban*/build/distributions目录下生成编译好的安装包,这里生成了tar.gz和zip类型的压缩包
ls */build/distributions/*
将编译成功的azkaban-*.tar.gz压缩包拷贝至/opt/cloudera/azkaban/software目录下
mkdir /opt/cloudera/azkaban/software -p
scp */build/distributions/*.tar.gz /opt/cloudera/azkaban/software
cd /opt/cloudera/azkaban/software
ls -ld *
将/opt/cloudera/azkaban/software目录下的所有压缩包解压到/opt/cloudera/azkaban目录下,并重命名
tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C ../
tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ..
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../
tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../
tar -zxvf azkaban-hadoop-security-plugin-0.1.0-SNAPSHOT.tar.gz -C ../
将解压的目录重名
cd ../
mv azkaban-db-0.1.0-SNAPSHOT azkaban-db
mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec-server
mv azkaban-hadoop-security-plugin-0.1.0-SNAPSHOT azkaban-hadoop-security-plugin
mv azkaban-solo-server-0.1.0-SNAPSHOT azkaban-solo-server
mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web-server
由于Azkaban目前只支持MySQL数据库,需要修改MySQL的/etc/my.cnf文件,增加如下配置:
vim /etc/my.cnf
max_allowed_packet = 20M
重启mysql数据库
service mariadb restart
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
1.将/opt/cloudera/azkaban/azkaban-solo-server目录下的conf、plugins目录拷贝至/opt/cloudera/azkaban/azkaban-web-server目录下
scp -r azkaban-solo-server/conf/ azkaban-solo-server/plugins/ azkaban-web-server/
cd azkaban-web-server/
ll
进入azkaban-web-server/conf目录下,修改azkaban.properties文件
该配置文件主要定义Azkaban-web-server服务的基本信息、数据库信息、监听端口、Executor设置以及插件目录配置等。
cd azkaban-web-server/conf
echo " " > azkaban.properties
vim azkaban.properties
---
# 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=/opt/cloudera/azkaban/azkaban-web-server/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
---
azkaban-web-server/conf目录下的azkaban-users.xml文件主要定义登录用户账号密码及权限,这里我们使用默认的配置信息
cd azkaban-web-server/conf
vim 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>
在azkaban-web-server/conf目录下新增log4j.properties文件,内容如下:
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
---
在azkaban-web-server目录下执行如下命令创建目录
创建第三方依赖包部署目录extlib
mkdir -p /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
将/opt/cloudera/azkaban/azkaban-solo-server目录下的conf、plugins目录拷贝至/opt/cloudera/azkaban/azkaban-exec-server目录下
cd /opt/cloudera/azkaban
cd azkaban-solo-server/
scp -r conf/ plugins/ /opt/cloudera/azkaban/azkaban-exec-server/
在azkaban-exec-server/conf目录下修改azkaban.properties文件,内容如下:
该配置文件主要定义Azkaban-exec-server服务的基本信息、数据库信息、监听端口及插件目录配置等。
cd azkaban-exec-server/conf
echo " " > azkaban.properties
vim azkaban.properties
----
# 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
---
在conf目录下新增log4j.properties配置文件内容如下
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
----
在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配置路径一致
cd /opt/cloudera/azkaban/azkaban-exec-server/plugins
mkdir -p jobtype
这里在启停服务的时候需要注意,如果直接进入到相应服务的bin目录下启动会导致服务启动时找不到相应的配置文件,所以我们需要在相应服务的HOME目录执行命令启停服务。
启停Azkaban-executor服务执行如下命令
cd /opt/cloudera/azkaban/azkaban-exec-server/
bin/azkaban-executor-shutdown.sh #停止azkaban-executor服务
bin/start-exec.sh #启动azkaban-executor服务并输出日志到logs目录
bin/azkaban-executor-start.sh
出现:
log:67 - Started SocketConnector@0.0.0.0:12321 表示启动成功
cd /opt/cloudera/azkaban/azkaban-web-server/
bin/azkaban-web-shutdown.sh #停止Azkaban-web服务
bin/start-web.sh #启动Azkaban-web服务并输出日志到./logs目录
log:67 - Started SocketConnector@0.0.0.0:8081
看到 8081 表示启动成功
在浏览器输入http://${hostname}:8081访问web界面,输入用户名和密码,在Azkaban-web-server/conf目录的azkaban-users.xml配置文件中,默认为azkaban/azkaban
http://172.17.100.11:8081
用户名: azkaban 密码: azkaban
创建一个test-azkaban工程
在本地创建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包