首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

YARN 简介

YARN 简介

简介Apache Hadoop 2.0 包含 YARN,它将资源管理和处理组件分开。基于 YARN                    的架构不受 MapReduce 约束。本文将介绍 YARN,以及它相对于 Hadoop                    中以前的分布式处理层的一些优势。本文将了解如何使用 YARN 的可伸缩性、效率和灵活性增强您的集群。
Apache Hadoop                    简介Apache Hadoop                    是一个开源软件框架,可安装在一个商用机器集群中,使机器可彼此通信并协同工作,以高度分布式的方式共同存储和处理大量数据。最初,Hadoop                    包含以下两个主要组件:Hadoop Distributed File System (HDFS)                    和一个分布式计算引擎,该引擎支持以 MapReduce 作业的形式实现和运行程序。
MapReduce 是 Google                    推广的一个简单的编程模型,它对以高度并行和可扩展的方式处理大数据集很有用。MapReduce 的灵感来源于函数式编程,用户可将他们的计算表达为 map 和 reduce 函数,将数据作为键值对来处理。Hadoop 提供了一个高级 API 来在各种语言中实现自定义的 map 和 reduce 函数。
Hadoop 还提供了软件基础架构,以一系列 map 和 reduce 任务的形式运行 MapReduce          作业。Map 任务          在输入数据的子集上调用 map 函数。在完成这些调用后,reduce 任务          开始在 map 函数所生成的中间数据上调用 reduce 任务,生成最终的输出。 map 和 reduce 任务彼此单独运行,这支持并行和容错的计算。
最重要的是,Hadoop                    基础架构负责处理分布式处理的所有复杂方面:并行化、调度、资源管理、机器间通信、软件和硬件故障处理,等等。得益于这种干净的抽象,实现处理数百(或者甚至数千)个机器上的数                    TB                    数据的分布式应用程序从未像现在这么容易过,甚至对于之前没有使用分布式系统的经验的开发人员也是如此。
Hadoop                    的黄金时代尽管 MapReduce 模型存在着多种开源实现,但 Hadoop MapReduce                    很快就变得非常流行。Hadoop 也是全球最令人兴奋的开源项目之一,它提供了多项出色的功能:高级                    API、近线性的可伸缩性、开源许可、在商用硬件上运行的能力,以及容错。它已获得数百(或许已达数千)个公司的成功部署,是大规模分布式存储和处理的最新标准。
一些早期的 Hadoop 采用者,比如 Yahoo! 和 Facebook,构建了包含 4,000                    个节点的大型集群,以满足不断增长和变化的数据处理需求。但是,在构建自己的集群后,他们开始注意到了                    Hadoop MapReduce 框架的一些局限性。
经典 MapReduce                    的局限性经典 MapReduce 的最严重的限制主要关系到可伸缩性、资源利用和对与 MapReduce                    不同的工作负载的支持。在 MapReduce 框架中,作业执行受两种类型的进程控制:
  • 一个称为 JobTracker                    的主要进程,它协调在集群上运行的所有作业,分配要在 TaskTracker                    上运行的 map 和 reduce 任务。
  • 许多称为 TaskTracker 的下级进程,它们运行分配的任务并定期向                    JobTracker 报告进度。
Apache Hadoop 的经典版本                    (MRv1)大型的 Hadoop 集群显现出了由单个 JobTracker 导致的可伸缩性瓶颈。依据                    Yahoo!,在集群中有 5,000 个节点和 40,000                    个任务同时运行时,这样一种设计实际上就会受到限制。由于此限制,必须创建和维护更小的、功能更差的集群。
此外,较小和较大的 Hadoop 集群都从未最高效地使用他们的计算资源。在 Hadoop                    MapReduce 中,每个从属节点上的计算资源由集群管理员分解为固定数量的 map 和 reduce                    slot,这些 slot 不可替代。设定 map slot 和 reduce slot 的数量后,节点在任何时刻都不能运行比 map slot 更多的 map 任务,即使没有 reduce 任务在运行。这影响了集群的利用率,因为在所有 map slot 都被使用(而且我们还需要更多)时,我们无法使用任何 reduce slot,即使它们可用,反之亦然。
最后但同样重要的是,Hadoop 设计为仅运行 MapReduce 作业。随着替代性的编程模型(比如                    Apache Giraph 所提供的图形处理)的到来,除 MapReduce                    外,越来越需要为可通过高效的、公平的方式在同一个集群上运行并共享资源的其他编程模型提供支持。
2010 年,Yahoo! 的工程师开始研究一种全新的 Hadoop                    架构,用这种架构来解决上述所有限制并增加多种附加功能。
解决可伸缩性问题在 Hadoop MapReduce 中,JobTracker 具有两种不同的职责:
  • 管理集群中的计算资源,这涉及到维护活动节点列表、可用和占用的 map 和 reduce slots 列表,以及依据所选的调度策略将可用 slots 分配给合适的作业和任务
  • 协调在集群上运行的所有任务,这涉及到指导 TaskTracker                    启动 map 和 reduce 任务,监视任务的执行,重新启动失败的任务,推测性地运行缓慢的任务,计算作业计数器值的总和,等等
为单个进程安排大量职责会导致重大的可伸缩性问题,尤其是在较大的集群上,JobTracker                    必须不断跟踪数千个                    TaskTracker、数百个作业,以及数万个 map 和 reduce 任务。下图演示了这一问题。相反,TaskTracker                    通常近运行十来个任务,这些任务由勤勉的 JobTracker 分配给它们。
大型 Apache Hadoop 集群 (MRv1)                    上繁忙的 JobTracker为了解决可伸缩性问题,一个简单而又绝妙的想法应运而生:我们减少了单个 JobTracker                    的职责,将部分职责委派给 TaskTracker,因为集群中有许多                    TaskTracker。在新设计中,这个概念通过将 JobTracker                    的双重职责(集群资源管理和任务协调)分开为两种不同类型的进程来反映。
不再拥有单个                    JobTracker,一种新方法引入了一个集群管理器,它惟一的职责就是跟踪集群中的活动节点和可用资源,并将它们分配给任务。对于提交给集群的每个作业,会启动一个专用的、短暂的                    JobTracker 来控制该作业中的任务的执行。有趣的是,短暂的 JobTracker                    由在从属节点上运行的 TaskTracker                    启动。因此,作业的生命周期的协调工作分散在集群中所有可用的机器上。得益于这种行为,更多工作可并行运行,可伸缩性得到了显著提高。
返回列表