大数据之 Hadoop-16-Oozie 任务调度

摘要:个人最近一段时间一直在使用oozie,从刚开始的各种别扭到现在越来越觉得有意思的情况下,想整理一下关于oozie的认知,整理出来一个oozie系列,本来市面上关于oozie的资料就比较少,希望写完后能形成自己对oozie的独特理解和加强整体性的把握.

一.常见的调度框架

1.1.crontab定时器

linux自带定时器,没有web界面 ,不利于监控任务和调度任务,在工作量比较小的情况下,建议使用linux的crontab定时命令

##crongtab 命令 
*   *   *   *   *    后面接调度 job 的命令  
分  时  日   月  周  
##简单实例(每天0点11分执行) 
11 0 * * * /home/hduser/lubians/intelligentDevice/intelligentDevice.sh 

1.2.Azkaban调度

开源项目,key/value配置对,操作简单,带web界面

1.3.Oozie调度

apache项目,xml配置文件,操作稍微有难度,带web查看界面,常用于hadoop相关任务的调度
Oozie官网

二.使用背景

公司下半年技术架构升级,将整个大数据集群管理流程化,规模化,引入了更多的技术组件,这其中就有Oozie.

2.1. 之前使用的调度技术

在这之前公司使用的调度工具主要是TaskCtl和Kettle,TaskCtl分为三层,Manage,Server和Agent.
可以理解为将调度分层了.

TASKCTL主要可以完成串行、并行、依赖、互斥、执行计划、定时、容错、循环、条件分支、远程、负载均衡、自定义条件等各种不同的核心调度功能。

根据不同的功能分类,TASKCTL将客户端分为Admin(平台管理)、Designer(流程集成开发环境)、Monitor(流程监控管理)三套不同的软件。

Admi:平台节点管理、任务类型管理、工程管理、应用设置、全局变量管理以及流程导入导出等功能。
Designer:平台流程代码信息管理、代码设计编辑、流程图形编辑、规则语法适时检测功能以及编译发布等功能。
Monitor:图形方式监控、多角度统计监控、流程起停重置、任务锁定、任务重做、信息对象查询等。

2.2. 为什么使用Oozie

TaskCtl最大的问题是作为调度系统需要一台单独的调度服务器,并且和Hadoop生态圈的产品搭配不是很好,所以考虑另行办法在Hadoop集群上使用调度工具.
使用Oozie的原因是因为公司使用的是Ambari集群管理工具,自带Oozie插件安装,同时Oozie支持Java API调度,会在工作中用到Java语言的缘故,选择了Oozie.

三.Oozie介绍

3.1. Oozie是什么

oozie是一个workflow(工作流)协调系统,是由Cloudera公司贡献给Apache的,主要用来管理Hadoop作业(job).属于web应用程序,由oozie client和oozie server两个组件构成.

oozie server运行于java servlet容器(tomcat)中的web程序.
file

Oozie架构:
file

从oozie的架构图中,可以看到所有的任务都是通过oozie生成相应的任务客户端,并通过任务客户端来提交相应的任务。

3.2. 为什么需要Oozie

①对于较为复杂的Hadoop作业系统来说,单纯的依靠shell脚本方式,手工方式调度是的流程更加难以控制.
②复杂系统的算法需要很多不同的作业(如mr,Java程序,shell脚本,hivesql,sqoop,spark等)按照特定的顺序,串行并行,不同时间,不同条件进行执行,就需要oozie这样的调度系统做支撑,将复杂问题简单化.

3.3. oozie能带来什么

①将hadoop生态系统中常见的mr任务启动,hdfs操作,shell调度,hive操作等通过统一的方式进行连贯调度.
②将复杂的依赖关系,时间触发,事件触发使用xml语言进行表达,提高开发效率.
③一组任务使用一个DAG(有向无环图)来表示,图形化的表达,流程逻辑更加清晰.
④支持很多种任务调度,能完成大部分的hadoop任务处理.
⑤程序定义支持EL常量和函数,写过shell脚本的小伙伴使用根本没难度.

四.Oozie架构图

在网上找了一个oozie架构图,如下:
file

oozie包含四大服务组件:

  • workflow: 用于支持动作有向无环图(DAG)的设计和执行,可以按照特定的顺序执行mr,hive和shell等节点.
  • coordinator: 用于定时调度特定的 workflow 进行执行,可以基于事件,资源存在,传递参数等自动执行.
  • bundle: 批量设定一组coordinator执行.
  • SLA(Service Level Agreement, oozie服务器等级协定): 用于程序执行过程的日志跟踪.

    4.1.Oozie简易架构

    file

如上图,oozie调度本身就是一个mr程序,开始,执行,结束或者失败,简单易懂.
所以我们可以思考一下,在oozie调度mr程序时,其实同一时间是运行了两个mr的,一个是调度本身,一个是任务.

4.2.一个有向无环图

任务本身是一个有向无环图(DAG)
file

图中fork标签后面的 MR job 和 Hive job 是并行执行的,都成功后通过 join 节点合并.

4.3.coordinator生命周期

file
coordinator是一个定时服务,通过定时来固定频率的执行任务,这里的功能类似crontab.

4.4.bundle Job

file

bundle的作用就是设定多个coordinator定时服务按批次执行,这样使得多个任务也形成一个DAG.

五、Oozie的安装与配置

1、Hadoop配置修改

1.1、修改 Hadoop配置

修改 core-site.xml

[root@centos01 hadoop]  cd /opt/modules/hadoop-3.1.3/etc/hadoop
vi core-site.xml

添加内容

<!-- Oozie Server 的 Hostname -->
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<!-- 允许被 Oozie 代理的用户组 -->
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>

修改 mapred-site.xml

vi mapred-site.xml

修改内容:

<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口 10020 -->
<property>
 <name>mapreduce.jobhistory.address</name>
 <value>centos01:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口 19888 -->
<property>
 <name>mapreduce.jobhistory.webapp.address</name>
 <value>centos01:19888</value>
</property>

完整文件:
file

修改 yarn-site.xml

vi yarn-site.xml
<!-- 任务历史服务 -->
<property> 
<name>yarn.log.server.url</name> 
<value>http://centos01:19888/jobhistory/logs/</value> 
</property>

file
完成后:记得 scp 同步到其他机器节点(centos02,centos03)

重启 Hadoop 集群

su hadoop
cd /opt/modules/hadoop-3.1.3/sbin
[hadoop@centos01 sbin]$ stop-all.sh
[hadoop@centos01 sbin]$ start-all.sh
[hadoop@centos01 sbin]$ mr-jobhistory-daemon.sh start historyserver

或者参考:

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
[atguigu@hadoop102 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver

注意:需要开启 JobHistoryServer, 最好执行一个 MR 任务进行测试。

注意:hadoop的历史任务的服务必须启动,即19888端口可以查看,具体如何配置19888请查看hadoop课程的环境搭建

修改完成之后,记得重启hadoop的hdfs与yarn集群,还要记得启动jobhistory

2、部署 Oozie

1、下载

从Apache官网 下载 Oozie 的稳定版本,这里使用的是 oozie-5.2.1.tar.gz
apache地址:https://dlcdn.apache.org/
国内镜像下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/

清华的镜像源下载地址:
https://mirrors.tuna.tsinghua.edu.cn/apache/oozie/5.2.1/oozie-5.2.1.tar.gz
https://dlcdn.apache.org/oozie/5.2.1/oozie-5.2.1.tar.gz

2、安装Oozie

(1)将下载Oozie 安装文件上传到 centos01 服务器的 /opt/softwares 目录并将其解压到目录 /opt/modules/

$ cd /opt/softwares
$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/oozie/5.2.1/oozie-5.2.1.tar.gz 
# $ wget --no-check-certificate https://dlcdn.apache.org/oozie/5.2.1/oozie-5.2.1.tar.gz
$ tar -zxvf oozie-5.2.1.tar.gz -C /opt/modules/

查看目录:

 [hadoop@centos01 softwares]$ cd /opt/modules/oozie-5.2.1/
[hadoop@centos01 oozie-5.2.1]$ ls -l
总用量 328
drwxr-xr-x.  2 hadoop hadoop   4096 2月  27 09:55 bin
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 client
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 core
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 distro
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 docs
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 examples
drwxr-xr-x.  4 hadoop hadoop     68 2月  27 09:55 fluent-job
-rw-r--r--.  1 hadoop hadoop  37664 2月  10 2021 LICENSE.txt
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 minitest
-rw-r--r--.  1 hadoop hadoop    450 2月  10 2021 NOTICE.txt
-rw-r--r--.  1 hadoop hadoop 111994 2月  10 2021 pom.xml
-rw-r--r--.  1 hadoop hadoop   3048 2月  10 2021 README.md
-rw-r--r--.  1 hadoop hadoop 160474 2月  10 2021 release-log.txt
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 server
drwxr-xr-x. 13 hadoop hadoop    165 2月  27 09:55 sharelib
-rw-r--r--.  1 hadoop hadoop   3520 2月  10 2021 source-headers.txt
drwxr-xr-x.  3 hadoop hadoop     18 2月  10 2021 src
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 tools
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 webapp
drwxr-xr-x.  3 hadoop hadoop     32 2月  27 09:55 zookeeper-security-tests
[hadoop@centos01 oozie-5.2.1]$ 

相关文章:
官网|Oozie Quick Start
掘金|Oozie任务调度框架详解安装及使用简介(一)
Oozie安装及使用
Oozie -入门安装介绍
oozie-5.0.0安装部署

为者常成,行者常至