一、概述
1.1 工作流调度系统
一个完整的数据分析系统,通常都是由大量任务单元组成:
shell脚本chengx
java程序
mapreduce程序
hive脚本等
各任务单元之间存在时间先后及依赖关系,为了很好的组织起这样的复杂执行计划,需要一个工作流调度系统来调度任务的执行。
假如,我有这样⼀一个需求,某个业务系统每天产⽣生20G原始数据,每天都要对其进⾏行行处理理,处理理步骤如下所示:
1)通过hadoop先将原始数据同步到HDFS上;
2)借助MapReduce原始框架对原始数据进行转换,生成的数据以分区表的形式存储到多张hive表中;
3)需要对hive中多个表的数据进行join处理,得到一个明细数据hive大表;
4)将明细数据进行各种统计分析,得到结果报表信息;
5)需要将统计分析得到的结果数据同步到业务系统中,供业务系统调用使用;
1.2 工作流调度实现方式
简单的任务调度:直接使用linux的crontab;
复杂的任务调度:开发调度平台或使用线程的开源调度系统,比如Ooize、Azkaban、Airflow等。
1.3 Azkaban与Oozie对比
总体来说,Ooize相比Azkaban是一个重量级的任务调度系统,功能全面但配置使用也更复杂(xml)。如果可以不在意某些功能的缺失,轻量级A调度器zkaban是很不错的候选对象。
功能:
两者均可调度mapreduce、pig、java、脚本工作流任务;
两者均可以定时执行工作流任务;
工作流定义:
Azkaban使用properties文件定义工作流;
Oozie使用XML文件定义工作流;
工作流传参:
Azkaban支持直接传参,例如${input}
Ooize支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
定时执行:
Azkaban的定时执行任务是基于时间的;
Oozie的定时执行任务基于时间和输入数据;
资源管理:
Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作;
Oozie暂无严格的权限控制;
工作流执行:
Azkaban有两种运行模式,分别是solo servermode(executor server和web server部署在同一台节点)和multi server mode(execotor server和web server可以部署在不用节点)
Oozie作为工作流服务器运行,支持多用户和多工作流;
二、Azkaban介绍
Azkaban是linkedin(领英)公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
Azkaban定义了一种KV文件(properties)格式来建立任务之间的依赖关系。
有如下功能特点:
1)web用户界面
2)方便上传工作流
3)方便设置任务之间的关系
4)调度工作流
架构角色:
1)MySql服务器:存储元数据,如项目名称、项目描述、项目权限、任务状态、SLA规则等。
2)AzkabanWebServer:对外提供web服务,是用户可以通过web页面管理。职责包括项目管理、权限授权、任务调度、监控executor。
3)AzkabanExecotorServer:负责工作流的提交、执行。
三、Azkaban安装部署
3.1 Azkaban的安装准备工作
1. 编译
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
Gradle是一个基于Apache Ant和Apache Maven的项目自动化构建工具。-x test 跳过测试。(注意联网下载jar可能会失败、慢)
2. 上传编译后的安装文件
在linux122节点创建目录:mkdir /opt/lagou/servers/azkaban