【Oozie】(二)Oozie 架构及运行模型介绍

简介: 【Oozie】(二)Oozie 架构及运行模型介绍

文章目录


一、Oozie 框架简介


二、Oozie 主要功能


三、Oozie 内部结构简单分析 (Oozie Internals)


四、Oozie 的水平可扩展性和垂直可扩展性


五、Oozie 的Action执行模型(Action Execution Model)


一、Oozie 框架简介


Oozie单词释义:驯象人


一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce、Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。


以xml的形式写调度流程,可以调度mr,pig,hive,shell,jar等。


二、Oozie 主要功能


Workflow: 顺序执行流程节点,支持fork(分支多个节点),join(合并多个节点为一个)


Coordinator,定时触发workflow (HUE4 改名叫Schedule)


Bundle Job,绑定多个coordinator(Schdule)


关系图:


image.png


Oozie 架构图:


image.png


Oozie节点:


  • 控制流节点(Control Flow Nodes):


控制流节点一般都是定义在工作流开始或者结束的位置,比如start,end,kill等。以及提供工作流的执行路径机制,如decision,fork,join等。


  • 动作节点(Action Nodes):


简而不能再简的言之,就是主要就是执行一些动作,比如FS ACTION,可以删除HDFS上的文件,创建文件夹等等。


  • 总结


oozie调度框架的学习,如果概念不了解,可以先在似懂非懂的状态下把例子学会,再回顾知识点,自然就理解了。


三、Oozie 内部结构简单分析 (Oozie Internals)


Oozie是Hadoop的工作流管理系统,正如论文《Oozie: towards a scalable workflow management system for Hadoop》所说:工作流提供了一种声明式的框架来有效地管理各种各样的作业,有四个大的需求:可扩展性、多租户、Hadoop 安全性、可操作性。


Oozie的架构图如下:


image.png


Oozie提供了RESTful API接口来接受用户的提交请求(提交工作流作业)。其实,在命令行使用oozie -job xxx命令提交作业,本质上也是发HTTP请求向OozieServer提交作业。

After the workflow submission to Oozie, workflow engine layer drives the execution and associated transitions. 
The workflow engine accomplishes these through a set of pre-defined internal sub-tasks called Commands.


当提交了workflow后,由工作流引擎负责workflow的执行以及状态的转换。比如,从一个Action执行到下一个Action,或者workflow状态由Suspend变成KILLED

Most  of  the  commands  are  stored  in  an  internal  priority  queue from where a pool of worker threads picks up
and executes those commands. There are two types of commands: 
some are executed when  the  user  submits  the  request  and  others  are  executed asynchronously.


这里有两种类型的Commands,一种是同步执行的,另一种是异步执行的。


用户在HDFS上部署好作业(MR作业),然后向Oozie提交Workflow,Oozie以异步方式将作业(MR作业)提交给Hadoop。这也是为什么当调用Oozie 的RESTful接口提交作业之后能立即返回一个jobId的原因,用户程序不必等待作业执行完成(因为有些大作业可能会执行很久(几个小时甚至几天))。Oozie在后台以异步方式,再将workflow对应的Action提交给hadoop执行。

Oozie  splits  larger  workflow  management tasks  (not  Hadoop  jobs)  into  smaller  manageable  subtasks
and asynchronously  processes  them  using  a  pre-defined  state transition model.

此外,Oozie提供了一个access layer访问底层的集群资源。这是Hadoop Security的一个方面吧。

Oozie  provides  a  generic  Hadoop  access  layer restricted through Kerberos authentication to 
access Hadoop’s Job Tracker and Name Node components.


四、Oozie 的水平可扩展性和垂直可扩展性


水平可扩展性体现在以下几个方面:


①具体的作业执行上下文不是在Oozie Server process中。这个在Oozie的Action执行模型中会提到。也就是说:Oozie Server只负责执行workflow,而workflow中的Action,比如MapReduce Action或者Java Action的执行是以集群的方式执行的。Oozie Server只负责查询这些Action的执行状态和结果,从而降低了Oozie Server的负载。

Oozie needs to execute different types of jobs as part of workflow processing. If the jobs are executed in the context of the server process, 
there will be twoissues: 
1) fewer jobs could run simultaneously  due  to  limited  resources  in  a  server  process causing  significant  penalty  in  scalability  and  
2)  the  user application  could  directly  impact  the  Oozie  server  performance.

通过将实际作业(MR Action or JAVA Action)的运行交给Hadoop来管理并执行,Oozie Server只负责查询作业的状态…如果用户提交的workflow增多了,只需要简单地增加Oozie Server 即可。


②作业的状态持久化到关系数据库中(以后考虑使用Zookeeper),由于作业(比如MR Action状态)状态存储在数据库中,而不是在单机的内存中,故很扩容。此外,上面还提到了,实际作业的具体执行是由Hadoop执行的。

Oozie stores the job states into a persistent store. This approach  enables 
 multiple  Oozie  servers  to  run  simultaneously from  different  machines.

垂直可扩展性体现在:


①线程池以及队列中的Commands的正确配置与使用。


②异步作业提交模型–减少线程的阻塞

Oozie  often uses a pre-defined timeout for any external communication. Oozie follows an asynchronous job execution pattern for interaction with 
external  systems.  For  example,  when  a  job  is  submitted  to  the Hadoop  Job  Tracker,  Oozie  does  not  wait  for  the  job  to  finish 
since  it  may  take  a  long  time.  Instead  Oozie  quickly  returns  the worker  thread  back  to  the  thread  pool  and  
later  checks  for  job completion  in  a  separate  interaction  using  a  different  thread.


③使用内存锁的事务模型 而不是 persistent model?–有点不懂

In order to maximize resource usage, the persistent store connections are held for the shortest possible duration. To this end,
 we chose a memory lock based transaction model instead of a persistent store based one; the latter is often more expensive to hold for long time.

最后看看Oozie是怎么从Hadoop集群中获取作业的执行结果的?— 回调 和 轮询 并用


回调是为了降低开销,轮询是为了保证可靠性。

When Oozie starts a MapReduce job, it provides a unique callback URL as part of the MapReduce  job  configuration;  the Hadoop  Job  Tracker 
invokes the  given  URL  to  notify the completion of the job. For  cases where the Job Tracker failed to invoke the callback URL for any reason
(i.e. a transient network failure), the system has a mechanism to poll the Job Tracker for determining the completion of the MapReduce job.

五、Oozie 的Action执行模型(Action Execution Model)


A fundamental design principle in Oozie is that the Oozie server never runs user code other than the execution of the workflow itself. 
This ensures better service stability byisolating user code away from Oozie’s code. The Oozie server is also stateless and the launcher job
makes it possible for it to stay that way. By leveraging Hadoop for running the launcher,
handling job failures and recoverability becomes easier for the stateless Oozie server.



①Oozie never run user code other than the execution of the workflow itself. 比如,这里的usercode就是用户编写的MapReduce程序。


② The Oozie server is also stateless and the launcher job…


oozie server的无状态其实就是它把作业的执行信息持久化到数据库了。


Action的执行模型图如下:


image.png


Oozie runs the actual actions through a launcher job, which itself is a Hadoop 
Map‐Reduce job that runs on the Hadoop cluster. The launcher is a map-only 
job that runs only one mapper.

Oozie通过 launcher job 运行某个具体的Action。launcher job是一个 map-only的MR作业,而且并不知道它将在集群的哪台机器上执行这个MR作业。


在上图中,Oozie Client提交了一个workflow给Oozie Server。这个workflow里面要执行具体的Hive作业(Hive Action)


首先Oozie Server会启动一个MR作业,也就是launcher job,由launcher job来发起具体的Hive作业。(Hive作业本质上是MR作业)


而我们知道:launcher job是个MR作业,它需要占用slot,也就是说:每提交一个workflow作业,都会创建一个launcher job并占用一个slot,如果底层Hadoop集群slot个数很少,而Oozie提交的作业又很多,launcher job把 slot用完了,使得实际执行Action已经没有slot可用了,这就会导致死锁。当然,可以通过配置Oozie的相关参数来避免Oozie发起太多的launcher job


另外,对于MR Action(Hive Action),launcher job 并不需要等到它发起的Action执行完毕后才退出。事实上:MR Action的launcher并不会等待MR作业执行完毕后才退出。

The  <map-reduce>launcher is the exception and it exits right after launching the actual job instead of waiting for it to complete.

另外,正是由于这个“launcher job 机制”,当需要将作业交给Oozie来管理运行时,需要将作业相关的配置文件先在HDFS上部署好,然后向Oozie Server发RESTful请求提交作业。



目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 分布式计算
大规模语言模型与生成模型:技术原理、架构与应用
本文深入探讨了大规模语言模型(LLMs)和生成模型的技术原理、经典架构及应用。介绍了LLMs的关键特点,如海量数据训练、深层架构和自监督学习,以及常见模型如GPT、BERT和T5。同时,文章详细解析了生成模型的工作原理,包括自回归模型、自编码器和GANs,并讨论了这些模型在自然语言生成、机器翻译、对话系统和数据增强等领域的应用。最后,文章展望了未来的发展趋势,如模型压缩、跨模态生成和多语言多任务学习。
162 3
|
2月前
|
存储 分布式计算 API
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
大数据-107 Flink 基本概述 适用场景 框架特点 核心组成 生态发展 处理模型 组件架构
111 0
|
19天前
|
机器学习/深度学习 测试技术 定位技术
新扩散模型OmniGen一统图像生成,架构还高度简化、易用
近期,一篇题为“OmniGen: Unified Image Generation”的论文介绍了一种新型扩散模型OmniGen,旨在统一图像生成任务。OmniGen架构简洁,无需额外模块即可处理多种任务,如文本到图像生成、图像编辑等。该模型通过修正流优化,展现出与现有模型相当或更优的性能,尤其在图像编辑和视觉条件生成方面表现突出。OmniGen仅含3.8亿参数,却能有效处理复杂任务,简化工作流程。尽管如此,OmniGen仍存在对文本提示敏感、文本渲染能力有限等问题,未来研究将继续优化其架构与功能。
45 16
|
1月前
|
机器学习/深度学习 自然语言处理 C++
TSMamba:基于Mamba架构的高效时间序列预测基础模型
TSMamba通过其创新的架构设计和训练策略,成功解决了传统时间序列预测模型面临的多个关键问题。
148 4
TSMamba:基于Mamba架构的高效时间序列预测基础模型
|
1月前
|
网络协议 网络架构
TCP/IP协议架构:四层模型详解
在网络通信的世界里,TCP/IP协议栈是构建现代互联网的基础。本文将深入探讨TCP/IP协议涉及的四层架构,以及每一层的关键功能和作用。
177 5
|
1月前
|
机器学习/深度学习 存储 人工智能
【AI系统】模型演进与经典架构
本文探讨了AI计算模式对AI芯片设计的重要性,通过分析经典模型结构设计与演进、模型量化与压缩等核心内容,揭示了神经网络模型的发展现状及优化方向。文章详细介绍了神经网络的基本组件、主流模型结构、以及模型量化和剪枝技术,强调了这些技术在提高模型效率、降低计算和存储需求方面的关键作用。基于此,提出了AI芯片设计应考虑支持神经网络计算逻辑、高维张量存储与计算、灵活的软件配置接口、不同bit位数的计算单元和存储格式等建议,以适应不断发展的AI技术需求。
40 5
|
2月前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
116 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
2月前
|
前端开发 Java 应用服务中间件
21张图解析Tomcat运行原理与架构全貌
【10月更文挑战第2天】本文通过21张图详细解析了Tomcat的运行原理与架构。Tomcat作为Java Web开发中最流行的Web服务器之一,其架构设计精妙。文章首先介绍了Tomcat的基本组件:Connector(连接器)负责网络通信,Container(容器)处理业务逻辑。连接器内部包括EndPoint、Processor和Adapter等组件,分别处理通信、协议解析和请求封装。容器采用多级结构(Engine、Host、Context、Wrapper),并通过Mapper组件进行请求路由。文章还探讨了Tomcat的生命周期管理、启动与停止机制,并通过源码分析展示了请求处理流程。
|
2月前
|
消息中间件 监控 Java
大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析
大数据-109 Flink 体系结构 运行架构 ResourceManager JobManager 组件关系与原理剖析
84 1
|
3月前
|
机器学习/深度学习
ACM MM24:复旦提出首个基于扩散模型的视频非限制性对抗攻击框架,主流CNN和ViT架构都防不住它
【9月更文挑战第23天】复旦大学研究团队提出了ReToMe-VA,一种基于扩散模型的视频非限制性对抗攻击框架,通过时间步长对抗性潜在优化(TALO)与递归令牌合并(ReToMe)策略,实现了高转移性且难以察觉的对抗性视频生成。TALO优化去噪步骤扰动,提升空间难以察觉性及计算效率;ReToMe则确保时间一致性,增强帧间交互。实验表明,ReToMe-VA在攻击转移性上超越现有方法,但面临计算成本高、实时应用受限及隐私安全等挑战。[论文链接](http://arxiv.org/abs/2408.05479)
88 3

热门文章

最新文章