Azakaban

匿名 (未验证) 提交于 2019-12-02 23:52:01

Azkaban

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

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

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

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

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

20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:

Hadoop先将原始数据上传到HDFS上(HDFS的操作);

MapReduce对原始数据进行清洗(MapReduce的操作);

hive表中(hive的导入操作);

Hive中多个表的数据进行JOIN处理,得到一张hive的明细表(创建中间表);

hive的查询操作);

1.2

2)任务依赖(1)任务的结果,(3)任务依赖(2)任务的结果,(4)任务依赖(3)任务的结果,(5)任务依赖(4)任务的结果。一般的做法是,先执行完(1)再执行(2),再一次执行(3)(4)(5)。

crontab执行。其实,整个过程类似于一个有向无环图(DAG)。每个子任务相当于大任务中的一个节点,也就是,我们需要的就是一个工作流的调度器,而Azkaban就是能解决上述问题的一个调度器。

1.3 什么是azkaban

Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

1.4 Azkaban特点

hadoop

Web用户界面

/授权(权限的工作)

1.5 常见工作流调度系统

1)简单的任务调度:直接使用crontab实现;

2)复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban等

1.6 ooize和azkaban特性对比

hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在显著的区别,在做技术选型的时候,可以提供参考

特性

Oozie

Azkaban

工作流描述语言

XML

text file with key/value pairs

是否要web容器

Yes

Yes

进度跟踪

web page

web page

Hadoop job调度支持

yes

yes

运行模式

daemon

daemon

事件通知

no

Yes

需要安装

yes

yes

支持的hadoop版本

0.20+

currently unknown

重试支持

workflownode evel

yes

运行任意命令

yes

yes

1.7 Azkaban的架构

Azkaban由三个关键组件构成:

MySQL):存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。

1.8 Azkaban下载地址

:http://azkaban.github.io/downloads.html

Azkaban安装部署

2.1 安装前准备

Azkaban Web服务器、Azkaban执行服务器、Azkaban的sql执行脚本及MySQL安装包拷贝到bigdata111虚拟机/opt/software目录下

MysqlAzkaban数据库,因为Azkaban建立了一些Mysql连接增强功能,以方便Azkaban设置,并增强服务可靠性。

2.2 安装Azkaban

/opt/module/目录下创建azkaban目录

[itstar@bigdata111 module]$ mkdir azkaban

azkaban-web-server-2.5.0.tar.gz、azkaban-executor-server-2.5.0.tar.gz、azkaban-sql-script-2.5.0.tar.gz到/opt/module/azkaban目录下

[itstar@bigdata111 software]$ tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /opt/module/azkaban/

[itstar@bigdata111 software]$ tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /opt/module/azkaban/

[itstar@bigdata111 software]$ tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /opt/module/azkaban/

[itstar@bigdata111 azkaban]$ mv azkaban-web-2.5.0/ server

[itstar@bigdata111 azkaban]$ mv azkaban-executor-2.5.0/ executor

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

[itstar@bigdata111 azkaban]$ mysql -uroot -p000000

mysql> create database azkaban;

mysql> use azkaban;

mysql> source /opt/module/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql

source后跟.sql文件,用于批量处理.sql文件中的sql语句。

2.3 生成密钥库

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

[itstar@bigdata111 azkaban]$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA

?

?

?

?

/市/自治区名称是什么?

/地区代码是什么?

CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?

注意:

6个字符,可以是纯数字或者字母或者数字和字母的组合等等

<jetty> 的密钥相同,方便记忆

[itstar@bigdata111 azkaban]$ mv keystore /opt/module/azkaban/server/

2.4 时间同步配置

先配置好服务器节点上的时区

Asia/Shanghai,就要用 tzselect 生成。

[itstar@bigdata111 azkaban]$ tzselect

Please identify a location so that time zone rules can be set correctly.

Please select a continent or ocean.

Asia

10) Pacific Ocean

11) none - I want to specify the time zone using the Posix TZ format.

#? 5

Please select a country.

China

#? 9

Please select one of the following time zone regions.

1) Beijing Time

2) Xinjiang Time

#? 1

The following information has been given:

Therefore TZ='Asia/Shanghai' will be used.

Is the above information OK?

1) Yes

2) No

#? 1

You can make this change permanent for yourself by appending the line

to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you

can use the /usr/bin/tzselect command in shell scripts:

Asia/Shanghai

2)拷贝该时区文件,覆盖系统本地时区配置

3

[itstar@bigdata111 azkaban]$ sudo date -s '2018-10-18 16:39:30'

2.5 配置文件

2.5.1 Web服务器配置

[itstar@bigdata111 conf]$ pwd

/opt/module/azkaban/server/conf

[itstar@bigdata111 conf]$ vim azkaban.properties

2)按照如下配置修改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/module/azkaban/server/web/

default.timezone.id=Asia/Shanghai

#Azkaban UserManager class

user.manager.class=azkaban.user.XmlUserManager

#用户权限管理默认类(绝对路径)

user.manager.xml.file=/opt/module/azkaban/server/conf/azkaban-users.xml

#Loader for projects

#global配置文件所在位置(绝对路径)

executor.global.properties=/opt/module/azkaban/executor/conf/global.properties

azkaban.project.dir=projects

#数据库类型

database.type=mysql

#端口号

mysql.port=3306

#数据库连接IP

mysql.host=bigdata111

#数据库实例名

mysql.database=azkaban

#数据库用户名

mysql.user=root

#数据库密码

mysql.password=000000

#最大连接数

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/module/azkaban/server/keystore

#SSL文件密码

jetty.password=000000

#Jetty主密码与keystore文件相同

jetty.keypassword=000000

#SSL文件名(绝对路径)

jetty.truststore=/opt/module/azkaban/server/keystore

#SSL文件密码

jetty.trustpassword=000000

# 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

[itstar@bigdata111 conf]$ vim azkaban-users.xml

<azkaban-users>

<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />

<user username="metrics" password="metrics" roles="metrics"/>

<user username="admin" password="admin" roles="admin,metrics" />

<role name="admin" permissions="ADMIN" />

<role name="metrics" permissions="METRICS"/>

</azkaban-users>

2.5.2 执行服务器配置

1)进入执行服务器安装目录conf,打开azkaban.properties

[itstar@bigdata111 conf]$ pwd

/opt/module/azkaban/executor/conf

[itstar@bigdata111 conf]$ vim azkaban.properties

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/module/azkaban/executor/conf/global.properties

azkaban.project.dir=projects

database.type=mysql

mysql.port=3306

mysql.host=bigdata111

mysql.database=azkaban

mysql.user=root

mysql.password=000000

mysql.numconnections=100

# Azkaban Executor settings

#最大线程数

executor.maxThreads=50

#端口号(如修改,请与web服务中一致)

executor.port=12321

#线程数

executor.flow.threads=30

2.6 启动executor服务器

在executor服务器目录下执行启动命令

[itstar@bigdata111 executor]$ pwd

/opt/module/azkaban/executor

[itstar@bigdata111 executor]$ bin/azkaban-executor-start.sh

2.7 启动web服务器

azkaban web服务器目录下执行启动命令

[itstar@bigdata111 server]$ pwd

/opt/module/azkaban/server

[itstar@bigdata111 server]$ bin/azkaban-web-start.sh

注意:

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

jps查看进程

[itstar@bigdata111 server]$ jps

3601 AzkabanExecutorServer

5880 Jps

3661 AzkabanWebServer

(建议使用谷歌浏览器)中输入https://服务器IP地址:8443azkaban服务了。

azkaban-users.xml文件中新添加的户用名及密码,admin和admin login。

Azkabanʵս

Azkaba内置的任务类型支持command、java

3.1单一job案例

1)创建job描述文件

[itstar@bigdata111 jobs]$ vim first.job

#first.job

type=command

command=echo 'this is my first job'

2) 将job资源文件打包成zip文件

[itstar@bigdata111 jobs]$ zip first.zip first.job

[itstar@bigdata111 jobs]$ ll

8

-rw-rw-r--. 1 itstar itstar 219 10月 18 17:43 first.zip

注意:

Azkaban上传的工作流文件只支持xxx.zip文件。zip应包含xxx.job运行作业所需的文件和任何文件(文件名后缀必须以.job结尾,否则无法识别)。作业名称在项目中必须是唯一的。

3)通过azkaban的web管理平台创建project并上传job的zip包

project

zip包

4)启动执行该job

点击执行工作流

点击继续

5)Job执行成功

6)点击查看job日志

3.2多job工作流案例

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

job:1.job

[itstar@bigdata111 jobs]$ vi 1.job

type=command

command=/opt/module/hadoop-2.8.4/bin/hadoop fs -put /opt/module/datas/word.txt /

job:2.job依赖1.job

[itstar@bigdata111 jobs]$ vi 2.job

type=command

command=/opt/module/hadoop-2.8.4/bin/hadoop jar /opt/module/hadoop-2.8.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.4.jar wordcount /word.txt /out

dependencies=1

2)job资源文件打到一个zip包中

3)在azkaban的web管理界面创建工程并上传zip包

4)查看结果

思考:

student.txt文件上传到hdfs,根据所传文件创建外部表,再将表中查询到的结果写入到本地文件

3.3 java操作任务

Azkaban调度java程序

1)编写java程序

import java.io.FileOutputStream;

import java.io.IOException;

public class AzkabanTest {

public void run() throws IOException {

//

FileOutputStream fos = new FileOutputStream("/opt/module/azkaban/output.txt");

fos.write("this is a java progress".getBytes());

fos.close();

}

public static void main(String[] args) throws IOException {

AzkabanTest azkabanTest = new AzkabanTest();

azkabanTest.run();

}

}

2)将java程序打成jar包,创建lib目录,将jar放入lib内

[itstar@bigdata111 azkaban]$ mkdir lib

[itstar@bigdata111 azkaban]$ cd lib/

[itstar@bigdata111 lib]$ ll

4

-rw-rw-r--. 1 itstar itstar 3355 10月 18 20:55 azkaban-0.0.1-SNAPSHOT.jar

3)编写job文件

[itstar@bigdata111 jobs]$ vim azkabanJava.job

#azkabanJava.job

type=javaprocess

java.class=AzkabanTest(全类名)

classpath=/opt/module/azkaban/lib/*

4)将job文件打成zip包

[itstar@bigdata111 jobs]$ zip azkabanJava.zip azkabanJava.job

5)通过azkaban的web管理平台创建project并上传job压缩包,启动执行该job

3.3 HDFS操作任务

1)创建job描述文件

[itstar@bigdata111 jobs]$ vi hdfs.job

#hdfs job

type=command

command=/opt/module/hadoop-2.8.4/bin/hadoop fs -mkdir /azkaban

2)将job资源文件打包成zip文件

[itstar@bigdata111 jobs]$ zip fs.zip fs.job

3)通过azkaban的web管理平台创建project并上传job压缩包

4)启动执行该job

5)查看结果

3.4 mapreduce任务

mapreduce任务依然可以使用azkaban进行调度

job描述文件,及mr程序jar包

[itstar@bigdata111 jobs]$ vim mapreduce.job

#mapreduce job

type=command

command=/opt/module/hadoop-2.8.4/bin/hadoop jar /opt/module/hadoop-2.8.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.4.jar wordcount /wordcount/input /wordcount/output

job资源文件打到一个zip包中

[itstar@bigdata111 jobs]$ zip mapreduce.zip mapreduce.job

3)在azkaban的web管理界面创建工程并上传zip包

4)启动job

5)查看结果

3.5 Hive脚本任务

1)创建job描述文件和hive脚本

1)Hive脚本:student.sql

[itstar@bigdata111 jobs]$ vim student.sql

use default;

drop table student;

create table student(id int, name string)

row format delimited fields terminated by '\t';

load data local inpath '/opt/module/datas/student.txt' into table student;

insert overwrite local directory '/opt/module/datas/student'

row format delimited fields terminated by '\t'

select * from student;

2)Job描述文件:hive.job

[itstar@bigdata111 jobs]$ vim hive.job

#hive job

type=command

command=/opt/module/hive/bin/hive -f /opt/module/azkaban/jobs/student.sql

job资源文件打到一个zip包中

3)在azkaban的web管理界面创建工程并上传zip包

4)启动job

5)查看结果

[itstar@bigdata111 student]$ cat /opt/module/datas/student/000000_0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!