`

Hadoop YARN框架

 
阅读更多
第一代Map-Reduce程序的流程设计及思路
1.首先用户程序 (JobClient) 提交了一个 job,job 的信息会发送到 Job Tracker 中,Job Tracker 是 Map-reduce 框架的中心,他需要与集群中的机器定时通信 (heartbeat), 
需要管理哪些程序应该跑在哪些机器上,需要管理所有 job 失败、重启等操作。
2.TaskTracker 是 Map-reduce 集群中每台机器都有的一个部分,他做的事情主要是监视自己所在机器的资源情况。
3.TaskTracker 同时监视当前机器的 tasks 运行状况。TaskTracker 需要把这些信息通过 heartbeat 发送给 JobTracker,JobTracker 会搜集这些信息以给新提交的 job 分配运行
在哪些机器上。上图虚线箭头就是表示消息的发送 - 接收的过程。
可以看得出原来的 map-reduce 架构是简单明了的,在最初推出的几年,也得到了众多的成功案例,获得业界广泛的支持和肯定,但随着分布式系统集群的规模和其工作负荷的增长,
原框架的问题逐渐浮出水面,主要的问题集中如下:

1.JobTracker 是 Map-reduce 的集中处理点,存在单点故障。
2.JobTracker 完成了太多的任务,造成了过多的资源消耗,当 map-reduce job 非常多的时候,会造成很大的内存开销,潜在来说,也增加了 JobTracker fail 的风险
,这也是业界普遍总结出老 Hadoop 的 Map-Reduce 只能支持 4000 节点主机的上限。
3.在 TaskTracker 端,以 map/reduce task 的数目作为资源的表示过于简单,没有考虑到 cpu/ 内存的占用情况,如果两个大内存消耗的 task 被调度到了一块,很容易出现 OOM。
4.在 TaskTracker 端,把资源强制划分为 map task slot 和 reduce task slot, 如果当系统中只有 map task 或者只有 reduce task 的时候,会造成资源的浪费,
也就是前面提过的集群资源利用的问题。
5.源代码层面分析的时候,会发现代码非常的难读,常常因为一个 class 做了太多的事情,代码量达 3000 多行,,造成 class 的任务不清晰,增加 bug 修复和版本维护的难度。
6.从操作的角度来看,现在的 Hadoop MapReduce 框架在有任何重要的或者不重要的变化 ( 例如 bug 修复,性能提升和特性化 ) 时,都会强制进行系统级别的升级更新。更糟的是,
它不管用户的喜好,强制让分布式集群系统的每一个用户端同时更新。这些更新会让用户为了验证他们之前的应用程序是不是适用新的 Hadoop 版本而浪费大量时间。 



重构根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度 / 监控。新的资源管理器全局管理所有应用程序计算资源的分配,
每一个应用的 ApplicationMaster 负责相应的调度和协调。一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务。
ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织。

事实上,每一个应用的 ApplicationMaster 是一个详细的框架库,它结合从 ResourceManager 获得的资源和 NodeManager 协同工作来运行和监控任务。

ResourceManager 是基于应用程序对资源的需求进行调度的 ; 每一个应用程序需要不同类型的资源因此就需要不同的容器。资源包括:内存,CPU,磁盘,网络等等。可以看出,
这同现 Mapreduce 固定类型的资源使用模型有显著区别,它给集群的使用带来负面的影响。资源管理器提供一个调度策略的插件,它负责将集群资源分配给多个队列和应用程序。
调度插件可以基于现有的能力调度和公平调度模型。

NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器汇报。
每一个应用的 ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。

新旧 Hadoop MapReduce 框架比对

让我们来对新旧 MapReduce 框架做详细的分析和对比,可以看到有以下几点显著变化:

首先客户端不变,其调用 API 及接口大部分保持兼容,这也是为了对开发使用者透明化,使其不必对原有代码做大的改变 ( 详见 2.3 Demo 代码开发及详解),
但是原框架中核心的 JobTracker 和 TaskTracker 不见了,取而代之的是 ResourceManager, ApplicationMaster 与 NodeManager 三个部分。

我们来详细解释这三个部分,首先 ResourceManager 是一个中心的服务,它做的事情是调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况。细心的读者会发现:Job 里面所在的 task 的监控、重启等等内容不见了。这就是 AppMst 存在的原因。
ResourceManager 负责作业与资源的调度。接收 JobSubmitter 提交的作业,按照作业的上下文 (Context) 信息,以及从 NodeManager 收集来的状态信息,启动调度过程,
分配一个 Container 作为 App Mstr

NodeManager 功能比较专一,就是负责 Container 状态的维护,并向 RM 保持心跳。

ApplicationMaster 负责一个 Job 生命周期内的所有工作,类似老的框架中 JobTracker。但注意每一个 Job(不是每一种)都有一个 ApplicationMaster,它可以运行在 ResourceManager 以外的机器上。

Yarn 框架相对于老的 MapReduce 框架什么优势呢?我们可以看到:

1.这个设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,
更安全、更优美。
2.在新的 Yarn 中,ApplicationMaster 是一个可变更的部分,用户可以对不同的编程模型写自己的 AppMst,让更多类型的编程模型能够跑在 Hadoop 集群中,可以参考 hadoop Yarn 官方配置模板中的 mapred-site.xml 配置。
3.对于资源的表示以内存为单位 ( 在目前版本的 Yarn 中,没有考虑 cpu 的占用 ),比之前以剩余 slot 数目更合理。
4.老的框架中,JobTracker 一个很大的负担就是监控 job 下的 tasks 的运行状况,现在,这个部分就扔给 ApplicationMaster 做了,而 ResourceManager 中有一个模块叫做 ApplicationsMasters( 注意不是 ApplicationMaster),它是监测 ApplicationMaster 的运行状况,如果出问题,会将其在其他机器上重启。
5.Container 是 Yarn 为了将来作资源隔离而提出的一个框架。这一点应该借鉴了 Mesos 的工作,目前是一个框架,仅仅提供 java 虚拟机内存的隔离 ,hadoop 团队的设计思路应该后续能支持更多的资源调度和控制 , 既然资源表示成内存量,那就没有了之前的 map slot/reduce slot 分开造成集群资源闲置的尴尬情况。

第一代Map-Reduce框架的缺点

1.JobTracker单点,容易导致崩溃,节点较多时造成性能瓶颈
2.作业分配基于槽位,粒度太粗。
3.Jobtracker和Tasktracker多次来回方能启动作业,导致小作业不能及时完成。
4.计算框架单一,Map-Reduce擅长日志分析,但却有大量的计算学习算法需要反复循环迭代,还有像图计算,可能
涉及数据不多,但却要在内存产生大量中间数据和超大计算量,这些都不适合使用M-R框架,但Hadoop 1.x却无法支持
流式数据库,基于内存的计算框架。

ResourceManager
控制整个集群幵管理应用程序向基础计算资源的分配。
将各个资源部分(计算、内存、带宽等)精心安排给基础NodeManager(YARN的每节点代理)。
ResourceManager还与ApplicationMaster一起分配资源,与NodeManager一起启动和监视它们的基础应用程序。
ApplicationMaster承担了以前的TaskTracker的一些角色,ResourceManager承担了JobTracker的角色。


Applicationmaster
ApplicationMaster管理一个在YARN 内运行的应用程序的每个实例。
负责协调来自ResourceManager的资源,并通过NodeManager监视容器的执行和资源使用(CPU、内存等的资源分配)。
请注意,尽管目前的资源更加传统(CPU 核心、内存),但未来会带来基于手头任务的新资源类型(比如图形处理单元戒与用处理设备)。
从YARN 角度讲,ApplicationMaster是用户代码,因此存在潜在的安全问题。YARN 假设ApplicationMaster存在错误戒者甚至是恶意的,因此将它们当作无特权的代码对待。

Nodemanager
NodeManager管理一个YARN 集群中的每个节点。
提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。MRv1 通过插槽管理Map 和Reduce 任务的执行,
而NodeManager管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源。

YARN集群使用流程
要使用一个YARN 集群,首先需要来自包含一个应用程序的客户的请求。
ResourceManager协商一个容器的必要资源,启劢一个ApplicationMaster来表示已提交的应用程序。
通过使用一个资源请求协议,ApplicationMaster协商每个节点上供应用程序使用的资源容器。
执行应用程序时,ApplicationMaster监视容器直到完成。
当应用程序完成时,ApplicationMaster从ResourceManager注销其容器,执行周期就完成了。

 

分享到:
评论

相关推荐

    Hadoop的yarn详解

    详细介绍了Hadoop2.x的资源管理框架yarn,内容丰富,很有帮助。

    HadoopYARN大数据计算框架及其资源调度机制研究

    HadoopYARN大数据计算框架及其资源调度机制研究,对Yarn的工作机制做一个全面的概述,揭示原理

    Hadoop YARN 基本架构和发展趋势 - d.pdf

    要内容 Hadoop YARN产生背景 1 Hadoop YARN基本架构 2 运行在YARN上的计算框架 3 YARN发展趋势 4 Hadoop YARN产生背景

    Hadoop新框架Yarn详解.docx

    Hadoop新框架Yarn详解.docxHadoop新框架Yarn详解.docx

    Hadoop新框架Yarn详解.pdf

    Hadoop新框架Yarn详解.pdf

    hadoop处理框架,hdfs,mapreduce,yarn

    hadoop处理框架,hdfs,mapreduce,yarn

    Yarn框架代码详细分析V0.5

    Hadoop的2.0版本的yarn的框架介绍啊 Hadoop yarnYARN 本身框架的优势是扩展性与支持多计算模型。对于扩展性目前主要体现在计算节点规模上,以前 JobTracker-TaskTracker 模型下最多大约在 5000 台机器左右,对于 ...

    RaisonHabi#machine-learning#TonY:构建在Hadoop YARN上的TensorFlow框架1

    1. TonY 主要包含三个要素:Client、ApplicationMaster 和 TaskExecutor 2. 用户向 Client 提交 Tensor

    guagua:Hadoop MapReduce和Hadoop YARN的迭代计算框架

    瓜瓜瓜Hadoop MapReduce和Hadoop YARN上的迭代计算框架。消息Guagua 0.7.7发布了很多改进。 检查我们的会议入门请访问以获取教程。什么是瓜瓜瓜? Shifu的子项目Guagua是一个基于Hadoop MapReduce和YARN的分布式,可...

    基于hadoop-yarn的在线离线混部资源管理系统项目源码.zip

    基于hadoop-yarn的在线离线混部资源管理系统项目源码.zip基于Hadoop-yarn的在离线混部资源管理系统提供对在线任务和离线任务在同一个集群下的混合调度。云计算是互联网时代信息基础设施的重要形态和信息技术发展的...

    精品课程推荐 大数据与云计算教程课件 优质大数据课程 03.Hadoop YARN(共25页).pptx

    大数据与云计算教程课件 优质大数据课程 03.Hadoop YARN(共25页).pptx 大数据与云计算教程课件 优质大数据课程 04.MapReduce Eclipse开发插件(共20页).pptx 大数据与云计算教程课件 优质大数据课程 05.Hadoop...

    YARN.xmind

    大主题:背景、YARN框架、YARN工作流程、对比分析、YARN的功能;此为思维导图由本人自己通过学习总结的,其中有参考林子雨教授的《大数据技术原理与应用》、湖南科技职业学院人工智能大数据教研组《分布式系统hadoop...

    HadoopYARN架构设计要点

    YARN是开源项目Hadoop的一个资源管理系统,最初设计是为了解决Hadoop中MapReduce计算框架中的资源管理问题,但是现在它已经是一个更加通用的资源管理系统,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之...

    storm-yarn:Storm-yarn使Storm集群可以部署到Hadoop YARN管理的计算机中

    Storm-yarn使Storm群集可以部署到Hadoop YARN管理的计算机中。 这项工作仍在进行中。 贡献者 冯德( ) 罗伯特·埃文斯( ) 德里克·达吉特( ) 内森·罗伯茨( ) 王鑫( ) 邮件列表 随时在Storm-yarn的邮件...

    hadoop2部署配置文件

    hadoop2.x配置文件,一共八个文件,能够配置hadoop yarn等框架

    Hadoop新MapReduce框架Yarn详解

    对于业界的大数据存储及分布式处理系统来说,Hadoop是耳熟能详的卓越开源分布式文件存储及处理框架,对于Hadoop框架的介绍在此不再累述,读者可参考Hadoop官方简介。使用和学习过老Hadoop框架(0.20.0及之前版本)的...

    Hadoop部署脚本

    Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集。...Hadoop YARN:作业调度和集群资源管理的框架。 Hadoop MapReduce:一种用于并行处理大型数据集的基于YARN的系统。

    分布式资源调度——YARN框架

    我们先看一下MapReduce1.x时所存在的问题:单点故障节点压力大不易扩展MapReduce1.x时的架构如下:分布式资源调度——YARN框架可以看到,1.x时也是Master/Slave这种主从结构,在集群上的表现就是一个JobTracker带多...

    Hadoop技术内幕深入解析YARN架构设计与实现原理

    资源名称:Hadoop技术内幕深入解析YARN架构设计与实现原理内容简介:本书从应用角度系统讲解了YARN的基本库和组件用法、应用程序设计方法、YARN上流行的各种计算框架(MapReduce、Tez、Storm、Spark),以及多个类...

Global site tag (gtag.js) - Google Analytics