第一代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架构是Hadoop版本2.x引入的一个重要组件,它负责处理资源管理和作业调度,而核心的计算任务处理则交给了MapReduce、Tez、Spark等计算框架。YARN的出现是为了解决Hadoop早期版本中的可扩展性问题,它通过...
《Hadoop YARN 权威指南》是一本深入解析Hadoop集群资源管理框架YARN的专业书籍,分为中文版和英文版。这本书对于理解和掌握Hadoop生态系统中的YARN至关重要,尤其对于大数据开发者、系统管理员和数据科学家来说,是...
【Hadoop YARN框架详解】 YARN,全称为Yet Another Resource Negotiator,是Apache Hadoop项目自0.23.0版本引入的新一代资源管理框架,旨在解决原Hadoop MapReduce框架的诸多问题,提高可扩展性、资源利用率和整体...
YARN的引入旨在解决早期Hadoop MapReduce模型中的一些局限性,如单一JobTracker的性能瓶颈、资源管理效率低等问题,从而提供更高效、灵活的集群资源管理和应用程序执行框架。 YARN的主要目标是将Hadoop的数据存储和...
Hadoop YARN的核心设计目标是提供一个资源管理平台,能够将计算资源分配给各种不同处理框架,而不仅仅是MapReduce。这样,除了批处理,YARN还可以支持实时计算、迭代处理等多样化的数据处理需求。在YARN之前,Hadoop...
在Hadoop YARN上,可以使用MapReduce进行大规模数据的预处理和特征提取,然后在Spark或其它实时计算框架中进行模型训练和实时推荐。 5. **数据处理流程**:首先,数据会被导入HDFS,然后由MapReduce进行离线处理,...
Hadoop YARN(Yet Another Resource Negotiator)是Hadoop 2.0引入的一个核心组件,旨在解决早期Hadoop版本中的扩展性问题、资源管理单一性以及对多计算框架支持不足的缺陷。YARN的出现,使得Hadoop不仅限于...
大数据处理框架:Hadoop:HadoopYARN架构与资源管理.docx
YARN是Hadoop 2.x版本引入的新一代资源管理框架,其主要目标是将原本由MapReduce承担的数据处理和资源管理职责分离,以提高系统的资源利用率和整体性能。通过YARN,可以运行各种计算框架,如MapReduce、Spark、Tez等...
Hadoop YARN(Yet Another Resource Negotiator)是Apache Hadoop项目中的一个核心组件,它的设计目标是解决早期Hadoop 1.x版本中MapReduce(MRv1)存在的问题,包括扩展性限制、单点故障以及对其他计算框架支持不足...
Hadoop是一个由Apache软件基金会支持的开源分布式存储和计算框架,它最初是为了处理大规模数据集而设计的。随着技术发展,Hadoop的1.0版本中的MapReduce成为了当时唯一的计算框架。MapReduce能够处理大规模数据集的...
Hadoop 处理框架、HDFS、MapReduce、YARN Hadoop 处理框架是大数据处理和分析的重要工具,主要由 HDFS、MapReduce 和 YARN 三个组件组成。HDFS 是一个分布式文件系统,提供高吞吐量的数据访问;MapReduce 是一个...
YARN框架能够通过资源调度器(如capacity scheduler)为不同需求的应用分配合适的资源,以确保各种计算任务都能高效运行。 标签调度(Label-based Scheduling)是YARN实现资源高效利用的一种重要方式,它能够根据...
Hadoop 2.6 是一个基于 YARN(Yet Another Resource Negotiator)的分布式计算框架,它提供了高效、可靠的数据处理能力。在本文中,我们将详细介绍 Hadoop 2.6 的安装配置过程,包括 NameNode 的高可用性配置、...
Hadoop 2.0 YARN,全称Yet Another Resource Negotiator,是Apache Hadoop生态系统中的一个核心组件,它在Hadoop 1.0 MapReduce的基础上进行了重大改进,旨在解决资源管理和调度的问题,以提高分布式计算的效率和...
标题 "hadoop-yarn-common-0.23.9.zip" 暗示了这是一个关于Hadoop YARN(Yet Another Resource Negotiator)组件的开源软件包,具体版本为0.23.9。Hadoop是Apache基金会的一个核心项目,主要用于大数据处理和分布式...
权威指南》涵盖了大数据处理的核心技术,包括Hadoop生态系统中的核心组件Hadoop Distributed File System (HDFS) 和资源管理框架YARN。这两部分是现代大数据处理平台的基础,对于理解和掌握大数据处理流程至关重要。...