⼯作流调度系统Azkaban

2021-02-18  本文已影响0人  奋斗的蛐蛐

概述

工作流调度系统

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

各任务单元之间存在时间先后及前后依赖关系,为了很好地组织起这样的复杂执⾏计划,需要一个⼯工作流调度系统来调度任务的执⾏。

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

工作流调度实现方式

AzkabanOozie对⽐

对市面上最流⾏的两种调度器,进⾏对比分析。总体来说,Ooize相比Azkaban是⼀个重量级的任务调度系统,功能全⾯,但配置使用也更复杂(xml)。如果可以不在意某些功能的缺失,轻量级调度器Azkaban是很不错的候选对象。

Azkaban介绍

Azkaban是由linkedin(领英)公司推出的一个批量工作流任务调度器,⽤于在⼀个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建⽴任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的⼯作流。

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

有如下功能特点

架构⻆色

mysql服务器: 存储Azkaban元数据,如项⽬名称、项目描述、项目权限、任务状态、SLA规则等

AzkabanWebServer:对外提供web服务,使⽤户可以通过web⻚面管理。职责包括项目管理、权限授权、任务调度、监控executor。

AzkabanExecutorServer:负责具体的工作流的提交、执⾏。

Azkaban安装部署

Azkaban的安装准备工作

编译
cd /opt/lagou/software/
wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz 
tar -zxvf 3.51.0.tar.gz -C ../servers/
cd /opt/lagou/servers/azkaban-3.51.0/
yum -y install git
yum -y install gcc-c++
./gradlew build installDist -x test
上传编译后的安装文件

在linux122节点创建目录

mkdir /opt/lagou/servers/azkaban
安装包.png

solo-server模式部署

单服务模式安装
  1. 解压
tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../../servers/azkaban
  1. 修改配置文件
cd /opt/lagou/servers/azkaban-solo-server-0.1.0-SNAPSHOT/conf 

vim azkaban.properties

default.timezone.id=Asia/Shanghai
 cd /opt/lagou/servers/azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes

vim commonprivate.properties

execute.as.user=false
memCheck.enabled=false
  1. 启动
cd /opt/lagou/servers/azkaban-solo-server-0.1.0-SNAPSHOT 
 
bin/start-solo.sh
  1. 访问
http://linux122:8081/index
 
用户名:azkaban 
密码: azkaban

multiple-executor 模式部署

安装需要的软件
Azkaban Web服务安装包 :azkaban-web-server-0.1.0-SNAPSHOT.tar.gz 
Azkaban执行服务安装包 :azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz 
sql脚本:azkaban-db-0.1.0-SNAPSHOT.tar.gz

节点规划

HOST 角色
linux121 mysql、exec-server
Linux122 Web-server
Linux123 Exec-server
数据库准备

linux123

mysql -uroot -p12345678
 
SET GLOBAL validate_password_length=5;

SET GLOBAL validate_password_policy=0;

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

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

CREATE DATABASE azkaban;

use azkaban;
#解压数据库脚本
tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C /opt/lagou/servers/azkaban 
#加载初始化sql创建表
source /opt/lagou/servers/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql; 
配置web-server

linux122,解压azkaban-web-server

 mkdir /opt/lagou/servers/azkaban
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz –C /opt/lagou/servers/azkaban/
 cd /opt/lagou/servers/azkaban/azkaban-web-server-0.1.0-SNAPSHOT 
#⽣成ssl证书:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
生成证书.png

修改配置文件

 cd /opt/lagou/servers/azkaban-web-server-3.51.0/conf vim azkaban.properties
 
# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local 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

# Azkaban Jetty server properties. 开启使⽤用ssl 并且知道端⼝口 
jetty.use.ssl=true
jetty.port=8443
jetty.maxThreads=25



# KeyStore for SSL ssl相关配置 
jetty.keystore=keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=keystore
jetty.trustpassword=azkaban

注意密码和证书路路径
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=linux123
mysql.database=azkaban
mysql.user=root
mysql.password=12345678
mysql.numconnections=100
#Multiple Executor 设置为false
azkaban.use.multiple.executors=true 

#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,Cp uStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1 azkaban.executorselector.comparator.Memory=1 azkaban.executorselector.comparator.LastDispatched=1 azkaban.executorselector.comparator.CpuUsage=1
 

添加属性

mkdir -p plugins/jobtypes
cd plugins/jobtypes/
vim commonprivate.properties
 azkaban.native.lib=false
 execute.as.user=false
 memCheck.enabled=false
配置exec-server

linux123

 tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz –C /opt/lagou/servers/azkaban/

修改配置文件

 cd /opt/lagou/servers/azkaban-exec-server-3.51.0/conf
 vim azkaban.properties
 
# Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local 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

# Where the Azkaban web server is located
azkaban.webserver.url=https://linux122:8443

# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=linux123
mysql.database=azkaban
mysql.user=root
mysql.password=12345678
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

分发到linux121节点

启动服务

先启动exec-server,再启动web-server
 #启动exec-server
 bin/start-exec.sh
 #启动web-server
 bin/start-web.sh

激活exec-server,启动webServer之后进程失败消失,可通过安装包根目录下对应启动⽇志进行排查。需要手动激活executor。


激活exec-server.png
cd /opt/lagou/servers/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT
curl -G "linux123:$(<./executor.port)/executor?action=activate" && echo

访问地址:

https://linux122:8443

Azkaban使用

shell command调度

创建job描述文件

vi command.job

 type=command
 command=echo 'hello'
shell调度.png
job任务调度

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

第一个job:foo.job

  type=command
  command=echo 'foo'

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

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

将所有job资源⽂件打到一个zip包中,在azkaban的web管理界⾯创建工程并上传zip包,启动job

遇到虚拟机内存不足情况:

  1. 增⼤机器内存

  2. 使⽤清除系统缓存命令,暂时释放一些内存

Hive脚本任务调度

Hive脚本: test.sql

use default;
drop table aztest;
create table aztest(id int,name string) row format delimited fields terminated by ',';

hive.job

type=command
command=/opt/lagou/servers/hive-2.3.7/bin/hive -f 'test.sql'

将所有job资源⽂件打到一个zip包中创建⼯程并上传zip包,启动job

MapReduce任务调度

创建job描述文件,及mr程序jar包(示例中直接使用hadoop自带的example jar)

mrwc.job:

type=command
command=/opt/lagou/servers/hadoop-2.9.2/bin/hadoop jar hadoop-mapreduce- examples-2.9.2.jar wordcount /wordcount/input /wordcount/azout

将所有job资源⽂件打到一个zip包中,在azkaban的web管理界⾯创建工程并上传zip包,启动job.

定时任务调度

除了手动立即执行工作流任务外,azkaban也支持配置定时任务调度。开启⽅式如下: ⾸页选择待处理的project 选择左边schedule表示配置定时调度信息,选择右边execute表示立即执⾏工作流任务。


定时任务调度.png
上一篇 下一篇

猜你喜欢

热点阅读