美文网首页
⼯作流调度系统Azkaban

⼯作流调度系统Azkaban

作者: 奋斗的蛐蛐 | 来源:发表于2021-02-18 09:40 被阅读0次

概述

工作流调度系统

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

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

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

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

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

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

  • 需要对Hive中多个表的数据进⾏JOIN处理,得到⼀个明细数据Hive大表;

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

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

工作流调度实现方式

  • 简单的任务调度

    直接使用linux的crontab;

  • 复杂的任务调度

    开发调度平台或使用现成的开源调度系统,⽐如Ooize、Azkaban、Airflow等

AzkabanOozie对⽐

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

  • 功能
    • 两者均可以调度mapreduce,pig,java,脚本⼯作流任务
    • 两者均可以定时执行工作流任务
  • 工作流定义
    • Azkaban使用Properties文件定义⼯作流
    • Oozie使用XML⽂件定义工作流
  • ⼯作流传参
    • Azkaban⽀持直接传参,例如${input}
    • Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
  • 定时执⾏
    • Azkaban的定时执行任务是基于时间的
    • Oozie的定时执行任务基于时间和输⼊数据
  • 资源管理
    • Azkaban有较严格的权限控制,如⽤户对⼯作流进⾏读/写/执⾏等操作
    • Oozie暂无严格的权限控制
  • 工作流执⾏
    • Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
    • Oozie作为⼯作流服务器运行,⽀持多用户和多工作流

Azkaban介绍

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

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

有如下功能特点

  • 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

相关文章

网友评论

      本文标题:⼯作流调度系统Azkaban

      本文链接:https://www.haomeiwen.com/subject/lebcsktx.html