====== Azkaban入门 ======自整,懒得加图片了
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程,应用于Hadoop生态圈的任务调度.。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
我们选择Azkaban的原因基于以下几点:
提供功能清晰,简单易用的Web UI界面
提供job配置文件快速建立任务和任务之间的依赖关系
提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop 基于Java开发,代码结构清晰,易于二次开发
1、Azkaban的安装说明
Azkaban有两种部署方式:solo server mode 和 cluster server mode。
solo server mode(单机模式):该模式中webServer和executorServer运行在同一个进程中,进程名是AzkabanSingleServer。可以使用自带的H2数据库或者配置mysql数据。该模式适用于小规模的使用。
cluster server mode(集群模式):该模式使用MySQL数据库,webServer和executorServer运行在不同进程中,该模式适用于大规模应用。
Azkaban的组成如下:
Azkaban Web Server----->Azkaban Executor Server
\
/
\
/
\ Mysql /
在Azkaban2中有两个server和一个数据库需要搭建:
|MySQL
|Azkaban Web Server - 是一个和web接口一样的充当控制器功能的Jetty Server
|Azkaban Executor Server - 用于提交工作流
其实在单机模式中,AzkabanSingleServer进程只是把AzkabanWebServer和AzkabanExecutorServer合到一起启动而已。
== 下面介绍单机版的安装过程。==
(1)下载Azkaban
下载地址:http://azkaban.github.io/downloads.html
(2)解压安装包
下载后的安装包是:azkaban-solo-server-x.x.x.tar.gz,解压后的主要目录如下所示:
bin:包含启动和停止的脚本
conf:配置文件目录
data:默认自带数据库H2的数据目录
executions:每个执行的工作流都会生成一个对应的文件夹,放在该目录下
extlib:第三方扩展包
lib:依赖的jar包
logs:执行日志
plugins:可拔插的插件包
projects:用户上传的压缩包所在目录
sql:运行所需要的mysql表的建表语句
web:前端展示界面对应的HTML/CSS/JS文件
(3)数据库安装配置
先进行MySQL安装过程;
进入MySQL命令行后,创建数据库:
CREATE DATABASE azkaban; 创建用户名和密码:
CREATE USER 'username'@'%' IDENTIFIED BY 'password'; 给用户授权:
GRANT SELECT,INSERT,UPDATE,DELETE ON <database>.* to '<username>'@'%' WITH GRANT OPTION;
导入下载包azkaban-sql-script-x.x.x.tar.gz中脚本“create.all.sql”
SOURCE create.all.sql;
检查下载包web和executor的lib文件下是否有mysql驱动,若不存在,则拷贝一个。
(4)修改配置文件conf/azkaban.properties(以下为可修改部分,其他默认即可)
#设置项目主标题
azkaban.name=Local
#设置项目副标题
azkaban.label=My Local Azkaban
#设置为上海时间(东八区),否则会按美国时间执行
default.timezone.id=Asia/Shanghai
#注释掉默认的H2数据库配置后,配置MySQL数据库
database.check.version=false
database.type=mysql
mysql.port=3306
mysql.host=192.168.0.1
mysql.database=azkaban
mysql.user=username
mysql.password=password
mysql.numconnections=100
#配置禁用Jetty服务器
jetty.use.ssl=false
jetty.ssl.port=8043
jetty.maxThreads=25
jetty.port=8081
#配置告警邮件
mail.sender=xxx@163.com
mail.host=smtp.163.com
mail.user=mailUsername
mail.password=mailPassword
#配置azkaban web url
azkaban.webserver.url=http://azkaban.xxx.com/
(5)配置plugin插件
在官网下载azkaban-jobtype-x.x.x.tar.gz文件,解压到azkaban安装目录下的plugin目录下,并重命名为jobtypes目录,然后配置commonprivate.properties文件如下:
jobtype.global.classpath=本地hadoop的config文件和lib文件
hadoop.classpath=同上
#配置各个组件的home
hadoop.home=/home/hadoop/hadoop-2.6.0-cdh5.5.0
pig.home=/home/hadoop/azkaban/plugins/jobtypes/pig
hive.home=/home/hadoop/hive-1.1.0-cdh5.5.0
spark.home=/home/hadoop/spark-1.6.0-bin-hadoop2.6
azkaban.home=/home/hadoop/azkaban/azkaban-solo-server-3.0.0
(6)启动与关闭
启动命令:
./bin/azkaban-solo-start.sh 关闭命令:
./bin/azkaban-solo-shutdown.sh 至此,Azkaban的单机版安装完成,在浏览器中访问:http://hostname:8081就可以看到Azkaban的UI界面啦!
===========
搭建数据库
现在,Azkaban只能用MySQL进行数据存储。
l 下载azkaban-sql-script tar包。
l 运行包中的mysql脚本来创建数据库表。
获取JDBC驱动jar包
下载地址:http://www.mysql.com/downloads/connector/j/
搭建Web Server
下载并安装
1、下载azkaban-web-server tar包。将其解压到你安装azkaban web的目录下。
2、Copy jdbc驱动jar包到./extlib目录下。Azkaban将会自动检查和加载这个目录下的外部引入jar包。
在 conf 目录下,会有以下几个文件:
azkaban.properties
用于Azkanba运行时的属性配置
global.properties
全局静态属性,作为共享属性共享给每一个工作流程和job
azkaban-users.xml
用于添加用户和角色权限的属性文件。如果XmlUserManager没有启动,则这个文件将不会被使用
搭建SSL
Azkaban使用SSL socket连接器。可以根据以下链接提供的方法创建:
http://docs.codehaus.org/display/JETTY/How+to+configure+SSL
一旦一个keystore文件被创建,Azkaban必须要给出它的位置和密码,包括azkaban.properties中下面的内容页应该被重写:
jetty.keystor-keystore
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password
搭建UserManager
Azkaban使用UserManager提供验证和用户角色的设置。默认情况下,Azkaban使用XmlUserManager获取username/passwords和从azkaban-users.xml中得到的角色设置,azkaban-users.xml可以再azkaban.properties文件中查看到:
l user.manager.class=azkaban.user.XmlUserManager
l User.manager.xml.file=conf/azkaban-users.xml
接下来是一个azkaban-users.xml文件的例子:
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban"/>
<role name="admin" permissions="ADMIN" />
</azkaban-users>
也可以利用其他实现权限验证和设置的方法通过实现azkaban.user.UserManager接口并改变user.manager.class属性来重写UserManager。
搭建数据库
为了让Azkaban web client可以连接到MySQL,需要配azkaban.properties文件中的一下属性:
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban2
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
配置主机和端口号
配置azkaban.properties中的属性:
executor.port=12321
executor.host=<url>
搭建Web Client
Azkaban作为一个Jetty Server搭建。你可以执行Azkaban将会使用的端口号和连接的数量。
颜色主题和名称可以定制的安装,特别是在区别多版本的Azkaban上非常有用。
安装可视化插件
之前的Azkaban版本包含HDFS浏览。在新版本的Azkaban中,它可以作为一个插件进行配置。
为了安装可视化插件,需要下载并文件解压到./plugin/viewer目录下。
运行Web Server
Bin目录下应该包含azkaban-web-start.sh文件。用这个文件来启动Azkaban Web Server。使用azkaban-web-shutdown.sh关闭azkaban。
== Azkaban Web Server设置 ==
一般属性
Property
Description
Default
azkaban.name 将会在Azkaban UI中展示出来的azkaban的名字 Local
azkaban.label 一个描述Azkaban实例的标签 My Local Azkaban
azkaban.color 设置Azkaban UI颜色的一个十六进制的值 #FF3601 (red)
web.resource.dir 设置UI的css和JavaScript文件存放的路径 src/web
default.timezone 默认的时区 America/Los_Angeles
user.manager.class 用户管理用户权限的user manager。默认是XmlUserManager azkaban.user.XmlUserManager
mail.sender 邮件发送的地址
mail.host 邮件server主机地址
mail.user 邮件server用户名
mail.password 邮件server密码
azkaban.should.proxy 被HDFS浏览器使用。如果以安全的形式使用Hadoop1.0+则设置为true。即将会被移除 false
proxy.keytab.location 被HDFS浏览器使用。如果以安全的形式使用Hadoop1.0+则设置为true。即将会被移除
proxy.user 代理用户
viewer.plugin.dir 可视化插件被安装到的目录 plugins/viewer
==设置Executor Server==
下载和安装
1、下载azkaban-executor-server tar包。将其解压到azkaban executor的安装目录下。
2、Copy jdbc驱动jar包到./extlib目录下。
File
Description
azkaban.properties
Azkaban运行时属性
global.properties
全局静态属性,作为共享属性共享给每一个工作流程和job
配置数据库
为了让Azkaban web client可以连接到MySQL,需要配azkaban.properties文件中的一下属性:
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban2
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
配置主机和端口号
配置azkaban.properties中的属性:
executor.maxThreads=50
executor.port=12321
2、Azkaban界面功能说明
Azkaban主界面中四个标签页,分别对应了它的四大功能模块:
Projects:每个独立的Flows都对应一个Projects,Flows将在Projects中运行
Scheduling:显示定时执行任务
Executing:显示正在执行的任务
History:显示历史执行任务
由于Projects模块涉及的功能比较多,下面重点介绍一下。点击进入一个Project后,Flows分别可以删除、上传、下载Project,我们编写完成并打包的zip文件,就是在这里上传的。界面中的三个标签页功能如下:
Flows:工作流程,由多个job组成,点击还可以进入图表界面,选择任意一个job节点,右键点击“Open Job…”可以看到该节点的配置参数,可进行编辑;
Permissions:用于权限管理 Project Logs:工程日志 点击Execute Flow按钮开始执行工作流,弹出界面;
Flow View:界面右边的流程图中的每个节点,都可以Disable和Enable
Notification:可以配置成功或失败时是否发出邮件。 Failure Options:当任务流执行失败是选择处理策略,默认是仅完成当前运行的job Concurrent:并行任务执行设置 Flow Parameters:设置执行的参数,用于覆盖全局设置的参数 最后点击Execute按钮即可执行。
每个执行成功的节点是绿色表示,如果执行失败,则用红色表示。
3、一个简单的例子
下面通过一个列子讲解Azkaban的开发流程。
(1)新建一个文件夹,在文件夹下创建两个文件hello1.job和hello2.job,内容如下:
hello1.job:
type=command
command=echo “this is hello1 job”
hello2.job:
type=command
command=echo “this is hello2 job”
dependencies=hello1
(2)把两个文件打包成hello.zip文件
(3)新建一个Azkaban工程:Hello,并上传hello.zip压缩文件
(4)上传成功后,可以在界面分别看到两个节点
(5)执行并查看输出
(6)点击Details,查看具体日志
(7)在history界面中可以查看到执行完成的任务:
至此,一个完整的任务从开发到执行完成。