热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oozie任务调度框架详解及使用简介(一)

摘要:个人最近一段时间一直在使用oozie,从刚开始的各种别扭到现在越来越觉得有意思的情况下,想整理一下关于oozie的认知,整理出来一个oozie系列,本来市面上关于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界面

Azkaban开源网站


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程序.

image_1akhmftbi11bjakq13n210q216db2a.png


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架构图,如下:

image_1akhmf44nvfh140gqc68pmhs1t.png

oozie包含四大服务组件:

workflow: 用于支持动作有向无环图(DAG)的设计和执行,可以按照特定的顺序执行mr,hive和shell等节点.

coordinator: 用于定时调度特定的 workflow 进行执行,可以基于事件,资源存在,传递参数等自动执行.

bundle: 批量设定一组coordinator执行.

SLA(Service Level Agreement, oozie服务器等级协定): 用于程序执行过程的日志跟踪.


4.1.Oozie简易架构

image_1akhm3bv8muv162h1u41ve318189.png

如上图,oozie调度本身就是一个mr程序,开始,执行,结束或者失败,简单易懂.

所以我们可以思考一下,在oozie调度mr程序时,其实同一时间是运行了两个mr的,一个是调度本身,一个是任务.


4.2.一个有向无环图

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

image_1akhmaidd6a3d6m11ak15oe9p0m.png

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


4.3.coordinator生命周期

image_1akhmbdfe32m1m6f363juu27713.png

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


4.4.bundle Job

image_1akhmcmbn12hu12g412tv1cjo19g11g.png

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


五.Oozie的安装与配置


5.1.Oozie的安装方式

单独安装: 需要安装server端和client端

组件安装: 使用Ambari进行oozie组件添加(可以使用HA)

注意:如果使用CDH集群管理工具,也是一键配置,因为我是直接组件式安装,这里就不细讲了,有需要的小伙伴可以联系我,看情况写一下ambari配置oozie.


5.2.Oozie配置

节点内存配置:

这里的节点内存配置可能会涉及到oozie调度阻塞的问题,这个在之后有时间整理一下整个问题现象以及解决办法,这里就看一下

#(节点并发),决定了你可以同时执行几个action
oozie.service.callablequeueservice.callable.concurrency
#(队列大小)
oozie.service.callablequeueservice.queue.size
#(扩展)一些扩展相关
oozie.service.ActionService.executor.ext.classes

clipboard.png


5.3.oozie元数据更改

ambari配置oozie元数据

clipboard1.png

Ambari默认数据库为Derby.

我们配置时,无特殊需求情况下,一般默认选择mysql

选择数据库类型,库名,用户名,url连接串,驱动,密码

测试连接成功即可.


5.4.ext2.2添加

进入oozie文件夹

将ext-2.2.tar.gz解压放到./libext/ext-2.2目录下


5.5.第三方jar包添加


  • 运行时的共享目录(在HDFS下)

  • libserver目录

  • libtools目录


六.Oozie管理


6.1.Oozie管理Web界面

http://ip:11000/oozie/

这里有时候会出现oozieUI界面无法访问问题,之后更新一篇文章,简单说明一下.


6.2.oozie使用


  • 任务列表查看

  • 任务状态查看

  • 流程返回信息

  • 节点信息查看

  • 流程图信息

  • 日志查看

  • 系统信息查看和配置

clipboard2.png


6.3.状态识别


































状态含义说明
PREP一个工作流Job第一次创建将处于PREP状态,表示工作流Job已经定义,但是没有运行。
RUNNING当一个已经被创建的工作流Job开始执行的时候,就处于RUNNING状态。它不会达到结束状态,只能因为出错而结束,或者被挂起。
SUSPENDED一个RUNNING状态的工作流Job会变成SUSPENDED状态,而且它会一直处于该状态,除非这个工作流Job被重新开始执行或者被杀死。
SUCCEEDED当一个RUNNING状态的工作流Job到达了end节点,它就变成了SUCCEEDED最终完成状态。
KILLED当一个工作流Job处于被创建后的状态,或者处于RUNNING、SUSPENDED状态时,被杀死,则工作流Job的状态变为KILLED状态。
FAILED当一个工作流Job不可预期的错误失败而终止,就会变成FAILED状态。

clipboard3.png

我是鲁边, 2020 peace and love

别惊讶,今年的主题就是爱与和平,但愿我能一直用下去...

按例按例,我的个人公众号:鲁边社,欢迎关注

avatar



推荐阅读
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 深入解析AUTOSAR方法论:汽车电子系统开发的理论基础(第三部分)
    本文详细探讨了AUTOSAR方法论在汽车电子软件系统开发中的应用,涵盖了从系统配置到生成可执行代码的各个关键步骤。通过介绍各阶段的任务和工具支持,帮助读者全面理解AUTOSAR的设计流程。 ... [详细]
  • 腾讯视频 Node.js 服务国庆阅兵直播高并发实战
    本文分享了腾讯视频团队在国庆阅兵直播项目中,如何利用Node.js服务成功应对2.38亿次观看的高并发挑战。文章将从服务架构、可用性保障、缓存策略、日志与告警等方面详细解析。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 从码农到创业者:我的职业转型之路
    在观察了众多同行的职业发展后,我决定分享自己的故事。本文探讨了为什么大多数程序员难以成为架构师,并阐述了我从一家外企离职后投身创业的心路历程。 ... [详细]
  • 优化Jenkins首次启动速度
    本文详细描述了在启动Jenkins后遇到的长时间加载问题,并提供了一种通过修改更新中心配置文件来显著提升启动速度的有效解决方案。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
  • 本文详细介绍了JSP(Java Server Pages)的九大内置对象及其功能,探讨了JSP与Servlet之间的关系及差异,并提供了实际编码示例。此外,还讨论了网页开发中常见的编码转换问题以及JSP的两种页面跳转方式。 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 深入理解Quartz:Java定时任务框架详解
    Quartz是一个功能强大的调度库,适用于各种规模的应用程序。本文将详细介绍Quartz的基本概念、配置方法以及如何在Java项目中使用Quartz来管理定时任务。 ... [详细]
  • 本文将详细介绍如何利用PHP进行实时监控及信息查看,包括PHP版本信息、Linux服务器状态以及客户端请求记录等。 ... [详细]
  • 本文详细介绍Linux中的cut命令,包括其基本功能、参数使用方法及应用场景。cut命令允许用户从文件中提取特定列或字符,支持多种分隔符。 ... [详细]
author-avatar
反反复复-念念不忘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有