【Azkaban】Azkaban入门解析

【Azkaban】Azkaban入门解析_第1张图片

(图片来源于网络,侵删)


一、Azkaban概述

1.简介

Azkaban是由Linkedin开源的一个批量工作流任务调度器
用于在一个工作流内以一个特定的顺序运行一组工作和流程
Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流

2.工作流调度系统

2.1 为什么需要工作流调度系统?

1)一个完整的数据分析系统通常都是由大量任务单元组成:

  • shell脚本程序,java程序,mapreduce程序、hive脚本等

2)各任务单元之间存在时间先后及前后依赖关系

3)为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行

例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:

  • 1).通过Hadoop先将原始数据上传到HDFS上(HDFS的操作)
  • 2).使用MapReduce对原始数据进行清洗(MapReduce的操作)
  • 3).将清洗后的数据导入到hive表中(hive的导入操作)
  • 4).对Hive中多个表的数据进行JOIN处理,得到一张hive的明细表(创建中间表)
  • 5).通过对明细表的统计和分析,得到结果报表信息(hive的查询操作)

【Azkaban】Azkaban入门解析_第2张图片

2.2 常见工作流调度系统

1)简单的任务调度:直接使用crontab实现;
2)复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban等

2.3 ooize和azkaban特性对比

下面的表格对上述四种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在显著的区别,在做技术选型的时候,可以提供参考
【Azkaban】Azkaban入门解析_第3张图片

3.功能特点

1、兼容任何版本的hadoop

2、提供功能清晰,简单易用的Web UI界面

3、简单的工作流的上传

4、提供job配置文件快速建立任务和任务之间的依赖关系

5、工作流调度

6、提供模块化和可插拔的插件机制,原生支持command、Java、Hive、Pig、Hadoop

7、认证/授权(权限的工作)

8、能够杀死并重新启动工作流

9、有关失败和成功的电子邮件提醒

10、项目工作区

11、工作流和任务的日志记录和审计

12、基于Java开发,代码结构清晰,易于二次开发

4.原理架构

【Azkaban】Azkaban入门解析_第4张图片

1、关系型数据库(MySQL): 存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等,AzkabanWebServerAzkabanExecutorServer都需要访问数据库

2、AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者,对外提供web服务,使用户可以通过web页面管理。职责包括项目管理、权限授权、任务调度、监控executor

3、AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行

二、Azkaban的安装

1、Azkaban有两种部署方式:

  • solo server mode (单机模式)
    该模式中webServer和executorServer运行在同一个进程中,进程名是AzkabanSingleServer。可以使用自带的H2数据库或者配置mysql数据。该模式适用于小规模的使用
  • cluster server mode (集群模式)
    该模式使用MySQL数据库,webServer和executorServer运行在不同进程中,该模式适用于大规模应用

2、Azkaban安装方式:

① 编译源码安装(切记保证网络顺通)

② 安装包直接安装

3、Azkaban安装:

安装前的准备:我们直接使用安装包安装,需要的安装包如下:

azkaban-executor-server-2.5.0.tar.gz
azkaban-sql-script-2.5.0.tar.gz
azkaban-web-server-2.5.0.tar.gz
mysql-libs.zip
1) 在/opt/modules目录下创建azkaban目录
mkdir azkaban
2) 解压 azkaban-web-server-2.5.0.tar.gzazkaban-executor-server-2.5.0.tar.gzazkaban-sql-script-2.5.0.tar.gz/opt/modules/azkaban目录下
tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/modules/azkaban
tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/modules/azkaban
tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/modules/azkaban
3) 对解压后的文件重新命名
mv azkaban-web-2.5.0/ server
mv azkaban-executor-2.5.0/ executor
4) azkaban脚本导入

进入mysql,创建azkaban数据库,并将解压的脚本导入到azkaban数据库

mysql -uroot -phadoop
create database azkaban;
use azkaban;
source /opt/modules/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
注:source后跟`.sql`文件,用于批量处理.sql文件中的sql语句
5) 生成密钥库

Keytool是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书

-keystore    指定密钥库的名称及位置(产生的各类信息将不在.keystore文件中)
-genkey      在用户主目录中创建一个默认文件".keystore" 
-alias  对我们生成的.keystore 进行指认别名;如果没有默认是mykey
-keyalg  指定密钥的算法 RSA/DSA 默认是DSA

生成 keystore的密码及相应信息的密钥库

cd /opt/modules/azkaban/server
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
输入密钥库口令:  第一次使用需要创建密码
再次输入新口令:  确认密码
您的名字与姓氏是什么?
  [Unknown]:  回车
您的组织单位名称是什么?
  [Unknown]:  回车
您的组织名称是什么?
  [Unknown]:  回车
您所在的城市或区域名称是什么?
  [Unknown]:  回车
您所在的省/市/自治区名称是什么?
  [Unknown]:  回车
该单位的双字母国家/地区代码是什么?
  [Unknown]:  回车
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
  [否]:  y

输入  的密钥口令
        (如果和密钥库口令相同, 按回车):  
再次输入新口令: 回车

注意:
密钥库的密码至少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等等
密钥库的密码最好和 的密钥相同,方便记忆

然后我们就可以在/opt/modules/azkaban/server目录下看到一个keystore文件

6) 时间同步
7) 配置文件(Web服务器配置)

进入azkaban web服务器安装目录conf目录

按照如下配置修改azkaban.properties文件

#Azkaban Personalization Settings
#服务器UI名称,用于服务器上方显示的名字
azkaban.name=Test
#描述
azkaban.label=My Local Azkaban
#UI颜色
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#默认web server存放web文件的目录
web.resource.dir=/opt/modules/azkaban/server/web
#默认时区,已改为亚洲/上海 默认为美国
default.timezone.id=Asia/Shanghai

#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#用户权限管理默认类(绝对路径)
user.manager.xml.file=/opt/modules/azkaban/server/conf/azkaban-users.xml

#Loader for projects
#global配置文件所在位置(绝对路径)
executor.global.properties=/opt/modules/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

#数据库类型
database.type=mysql
#端口号
mysql.port=3306
#数据库连接IP
mysql.host=node01
#数据库实例名
mysql.database=azkaban
#数据库用户名
mysql.user=root
#数据库密码
mysql.password=hadoop
#最大连接数
mysql.numconnections=100

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
# Jetty服务器属性.
#最大线程数
jetty.maxThreads=25
#Jetty SSL端口
jetty.ssl.port=8443
#Jetty端口
jetty.port=8081
#SSL文件名(绝对路径)
jetty.keystore=/opt/modules/azkaban/server/keystore
#SSL文件密码
jetty.password=hadoop
#Jetty主密码与keystore文件相同
jetty.keypassword=hadoop
#SSL文件名(绝对路径)
jetty.truststore=/opt/modules/azkaban/server/keystore
#SSL文件密码
jetty.trustpassword=hadoop

# Azkaban Executor settings
executor.port=12321

# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache

按照如下配置修改azkaban-users.xml文件

# 添加一个admin用户

8) 配置文件(Executor服务器配置)

进入azkaban executor服务器安装目录conf目录

按照如下配置修改azkaban.properties文件

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

# Azkaban JobTypes Plugins
#jobtype 插件所在位置
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects
executor.global.properties=/opt/modules/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=node01
mysql.database=azkaban
mysql.user=root
mysql.password=hadoop
mysql.numconnections=100

# Azkaban Executor settings
#最大线程数
executor.maxThreads=50
#端口号(如修改,请与web服务中一致)
executor.port=12321
#线程数
executor.flow.threads=30
9) 启动!!!

启动executor服务器

/opt/modules/azkaban/executor/bin/azkaban-executor-start.sh

启动web服务器

/opt/modules/azkaban/server/bin/azkaban-web-start.sh

注意:
先执行executor,再执行web,避免Web Server会因为找不到执行器启动失败

10) 查看

jps查看进程

jps
3601 AzkabanExecutorServer
5880 Jps
3661 AzkabanWebServer

Web页面查看

启动完成后,在浏览器输入https://服务器IP地址:8443,即可访问azkaban服务,使用admin用户登录
【Azkaban】Azkaban入门解析_第5张图片
【Azkaban】Azkaban入门解析_第6张图片

三、 Azkaban使用实战

1、shell command调度

① 在Windows本地创建job描述文件 command.job

添加如下内容:

type=command                                                    
command=echo "this is shell command"

② 将job资源文件打包成zip文件
【Azkaban】Azkaban入门解析_第7张图片
③ 通过azkaban的web管理平台创建project并上传job压缩包
【Azkaban】Azkaban入门解析_第8张图片
④ 创建任务
【Azkaban】Azkaban入门解析_第9张图片
⑤ 上传ZIP包
【Azkaban】Azkaban入门解析_第10张图片
【Azkaban】Azkaban入门解析_第11张图片
⑥ 执行任务
【Azkaban】Azkaban入门解析_第12张图片
【Azkaban】Azkaban入门解析_第13张图片
【Azkaban】Azkaban入门解析_第14张图片

2、 job依赖调度

① 创建有依赖关系的多个job描述

第一个job:foo.job

type=command
command=echo 'foo.job'

第二个job:bar.job
bar.job依赖foo.job

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

注:dependencies 填写依赖job的文件名

② 将所有job资源文件打到一个zip包中
③ 在azkaban的web管理界面创建工程并上传zip包
④ 执行

3、HDFS任务调度

① 创建job描述文件

type=command
command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz

② 将job资源文件打包成zip文件
③ 在azkaban的web管理界面创建工程并上传zip包
④ 执行

4、MapReduce任务调度

① 创建job描述文件

type=command
command= hadoop jar /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar wordcount /wordcount/input /wordcount/output

② 将job资源文件打包成zip文件
③ 在azkaban的web管理界面创建工程并上传zip包
④ 执行

5、HIVE脚本任务调度

① 创建job描述文件和hive脚本

Hive脚本: test.sql

use default;
drop table aztest;
create table aztest(id int,name string) row format delimited fields terminated by ',';
load data inpath '/aztest/hiveinput' into table aztest;
create table azres as select * from aztest;
insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest; 

job

type=command
command=/home/hadoop/apps/hive/bin/hive -f 'test.sql'

② 将job资源文件打包成zip文件
③ 在azkaban的web管理界面创建工程并上传zip包
④ 执行

6、定时任务调度

除了手动立即执行工作流任务外,azkaban也支持配置定时任务调度;开启方式如下:

6.1 首页选择待处理的project

【Azkaban】Azkaban入门解析_第15张图片
【Azkaban】Azkaban入门解析_第16张图片

上述图片中,选择左边schedule表示配置定时调度信息,选择右边execute表示立即执行工作流任务


都看到这里了,点赞评论一下吧!!!

你可能感兴趣的:(Flume,Hue,Azkaban,Sqoop,Impala,大数据,Azkaban)