工作流调度器azkaban

一、准备

安装VMware15虚拟化软件

安装CentOS 7虚拟机3个

安装3节点的hadoop-2.6.0-cdh5.14.2集群

安装了hive

安装了zookeeper集群

安装了hbase集群

二、主题

azkaban架构

azkaban运行模式

azkaban安装部署

azkaban使用

三、目标

理解azkanban架构

完成azkaban安装部署

学会azkaban各种使用方式

四、知识要点

1. 概述

azkaban官网:https://azkaban.github.io/


功能特点

提供功能清晰、简单易用的web UI界面

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

提供模块化的可插拔机制,原生支持command、java、hive、hadoop

基于java开发,代码结构清晰,易于二次开发

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

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

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

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

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

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

通过Hadoop先将原始数据同步到HDFS上;

借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;

需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive宽表;

将明细数据进行各种统计分析,得到结果报表信息;

需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。

2. 工作流调度实现方式

简单的任务调度:直接使用linux的crontab来定义;

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

2. Azkaban介绍

Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。

Azkaban定义了一种KV文件(properties)格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

它有如下功能特点:

Web用户界面

方便上传工作流

方便设置任务之间的关系

调度工作流

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

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

模块化和可插拔的插件机制

项目工作区

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

3. azkaban的基本架构


Azkaban由三部分构成

1、Azkaban Web Server提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。

2、Azkaban Executor Server负责具体的工作流和任务的调度提交

3、Mysql用于保存项目、日志或者执行计划之类的信息

4. Azkaban架构的三种运行模式

1. solo server mode(单机模式)

web server 和 executor server运行在一个进程里

最简单的模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。​

2. two server mode

web server 和 executor server运行在不同的进程

数据库为mysql,管理服务器和执行服务器在不同进程,这种模式下,管理服务器和执行服务器互不影响。​

3. multiple executor mode

web server 和 executor server运行在不同的进程,executor server有多个

该模式下,执行服务器和管理服务器在不同主机上,且执行服务器可以有多个。​

5. Azkaban安装部署

1. azkaban的编译

我们这里选用azkaban3.51.0这个版本自己进行重新编译,编译完成之后得到我们需要的安装包进行安装

注意:我们这里编译需要使用==jdk1.8==的版本来进行编译,如果编译服务器使用的jdk版本是1.7的,记得切换成jdk1.8,我们这里使用的是jdk8u141这个版本来进行编译

cd /kkb/soft/

wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz

tar -zxvf 3.51.0.tar.gz -C ../install/

cd /kkb/install/azkaban-3.51.0/

yum -y install git

yum -y install gcc-c++

./gradlew build installDist -x test

编译之后需要的安装文件列表如下

azkaban-exec-server

编译完成之后得到我们需要的安装包在以下目录下即可获取得到azkaban-exec-server存放目录

/kkb/install/azkaban-3.51.0/azkaban-exec-server/build/distributions


azkaban-web-server

azkaban-web-server存放目录

/kkb/install/azkaban-3.51.0/azkaban-web-server/build/distributions


azkaban-solo-server

azkaban-solo-server存放目录

/kkb/install/azkaban-3.51.0/azkaban-solo-server/build/distributions


execute-as-user.c

azkaban two server模式下需要的C程序在这个路径下面

/kkb/install/azkaban-3.51.0/az-exec-util/src/main/c


数据库脚本文件

数据库脚本文件在这个路径下面

/kkb/install/azkaban-3.51.0/azkaban-db/build/install/azkaban-db


2. azkaban两个服务模式安装

在node03节点操作

1. 确认所需软件:

Azkaban Web服务安装包

azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

Azkaban执行服务安装包

azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

编译之后的sql脚本

create-all-sql-0.1.0-SNAPSHOT.sql

C程序文件脚本

execute-as-user.c程序

将以上4个文件上传到node03的/kkb/soft目录

2. 数据库准备

进入mysql的客户端执行以下命令

mysql -uroot -p

执行以下命令:

-- 设置密码的验证强度等级

set global validate_password_policy=LOW;

set global validate_password_length=6;

CREATE DATABASE azkaban;

CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'; 

GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;

flush privileges;

use azkaban;

source /kkb/soft/create-all-sql-0.1.0-SNAPSHOT.sql;


3. 解压软件安装包

解压azkaban-web-server

cd /kkb/soft

tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../install/

cd /kkb/install

mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web-server-3.51.0

解压azkaban-exec-server

cd /kkb/soft

tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ../install/

cd /kkb/install

mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec-server-3.51.0

4. 安装SSL安全认证

安装ssl安全认证,允许我们使用https的方式访问我们的azkaban的web服务;

密码一定要一个个的字母输入,或者粘贴也行

cd /kkb/install/azkaban-web-server-3.51.0

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

密码一直输入azkaban


5. azkaban web server安装

修改azkaban-web-server的配置文件

cd /kkb/install/azkaban-web-server-3.51.0/conf

vim azkaban.properties

# Azkaban Personalization Settings

azkaban.name=Azkaban

azkaban.label=My 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

# Velocity dev mode

velocity.dev.mode=false

# Azkaban Jetty server properties.

jetty.use.ssl=true

jetty.maxThreads=25

jetty.port=8081

jetty.ssl.port=8443

jetty.keystore=/kkb/install/azkaban-web-server-3.51.0/keystore

jetty.password=azkaban

jetty.keypassword=azkaban

jetty.truststore=/kkb/install/azkaban-web-server-3.51.0/keystore

jetty.trustpassword=azkaban

# Azkaban Executor settings

# 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 install 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 mysql settings by default. Users should configure their own username and password.

database.type=mysql

mysql.port=3306

mysql.host=node03

mysql.database=azkaban

mysql.user=azkaban

mysql.password=azkaban

mysql.numconnections=100

#Multiple Executor

azkaban.use.multiple.executors=true

#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus #注意

azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1

azkaban.executorselector.comparator.Memory=1

azkaban.executorselector.comparator.LastDispatched=1

azkaban.executorselector.comparator.CpuUsage=1

azkaban.activeexecutor.refresh.milisecinterval=10000

azkaban.queueprocessing.enabled=true

azkaban.activeexecutor.refresh.flowinterval=10

azkaban.executorinfo.refresh.maxThreads=10

需要修改的项目如下图



6. azkaban executor server 安装

第一步:修改azkaban-exex-server配置文件

修改azkaban-exec-server的配置文件

cd /kkb/install/azkaban-exec-server-3.51.0/conf

vim azkaban.properties

# Azkaban Personalization Settings

azkaban.name=Azkaban

azkaban.label=My 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

# Velocity dev mode

velocity.dev.mode=false

# Azkaban Jetty server properties.

jetty.use.ssl=true

jetty.maxThreads=25

jetty.port=8081

#注意 添加如下5行内容

jetty.keystore=/kkb/install/azkaban-web-server-3.51.0/keystore

jetty.password=azkaban

jetty.keypassword=azkaban

jetty.truststore=/kkb/install/azkaban-web-server-3.51.0/keystore

jetty.trustpassword=azkaban

# Where the Azkaban web server is located

azkaban.webserver.url=https://node03:8443

# 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 install 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

azkaban.jobtype.plugin.dir=plugins/jobtypes

# Azkaban mysql settings by default. Users should configure their own username and password.

database.type=mysql

mysql.port=3306

mysql.host=node03

mysql.database=azkaban

mysql.user=azkaban

mysql.password=azkaban

mysql.numconnections=100

# Azkaban Executor settings

executor.maxThreads=50

executor.flow.threads=30

需要修改的项目如下图



第二步:添加插件

将我们编译后的C文件execute-as-user.c上传到这个目录来/kkb/install/azkaban-exec-server-3.51.0/plugins/jobtypes或者直接将我们/kkb/softwares下面的文件拷贝过来也行

cp /kkb/soft/execute-as-user.c /kkb/install/azkaban-exec-server-3.51.0/plugins/jobtypes/

然后执行以下命令生成execute-as-user

sudo yum -y install gcc-c++

cd /kkb/install/azkaban-exec-server-3.51.0/plugins/jobtypes

gcc execute-as-user.c -o execute-as-user

sudo chown root execute-as-user

sudo chmod 6050 execute-as-user

第三步:修改配置文件

修改配置文件

cd /kkb/install/azkaban-exec-server-3.47.0/plugins/jobtypes

vim commonprivate.properties

文件末尾增加两行,内容如下

memCheck.enabled=false

azkaban.native.lib=/kkb/install/azkaban-exec-server-3.51.0/plugins/jobtypes


最终生成如下


7. 启动服务

第一步:启动azkaban exec server

cd /kkb/install/azkaban-exec-server-3.51.0

bin/start-exec.sh


第二步:激活我们的exec-server

node03机器任意目录下执行以下命令

curl -G "node03:$(<./executor.port)/executor?action=activate" && echo


第三步:启动azkaban-web-server

cd /kkb/install/azkaban-web-server-3.51.0/

bin/start-web.sh


访问地址:

https://node03:8443

用户名和密码都是azkaban

若浏览器界面出现类似情况,按图操作即可


8. 修改linux的时区问题

由于先前做好了时钟同步,所以不用担心时区问题,不需要修改时区了

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

1、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可

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

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


6. Azkaban使用

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

1. Command类型单一job示例

1. 创建job描述文件

创建文本文件,更改名称为mycommand.job

注意后缀.txt一定不要带上,保存为格式为UFT-8 without bom

内容如下

type=command

command=echo 'hello world'

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


. 创建project并上传压缩包

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

首先创建project







你可能感兴趣的:(工作流调度器azkaban)