Hadoop 新 MapReduce 框架 Yarn 详解

2019-03-28 12:54|来源: 网络

简介: 本文介绍了 Hadoop 自 0.23.0 版本后新的 map-reduce 框架(Yarn) 原理,优势,运作机制和配置方法等;着重介绍新的 yarn 框架相对于原框架的差异及改进;并通过 Demo 示例详细描述了在新的 yarn 框架下搭建和开发 hadoop 程序的方法。读者通过本文中新旧 hadoop map-reduce 框架的对比,更能深刻理解新的 yarn 框架的技术原理和设计思想,文中的 Demo 代码经过微小修改即可用于用户基于 hadoop 新框架的实际生产环境。

样例代码 source_code.zip 与 config_files.zip 下载:

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2013年资料/9月/14日/Hadoop 新 MapReduce 框架 Yarn 详解

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------分割线------------------------------------

Hadoop MapReduceV2(Yarn) 框架简介

原 Hadoop MapReduce 框架的问题

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


图 1.Hadoop 原 MapReduce 架构
图 1.Hadoop 原 MapReduce 架构

从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路:

  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 版本而浪费大量时间。

新 Hadoop Yarn 框架原理及运作机制

从业界使用分布式系统的变化趋势和 hadoop 框架的长远发展来看,MapReduce 的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性,内存消耗,线程模型,可靠性和性能上的缺陷。在过去的几年中,hadoop 开发团队做了一些 bug 的修复,但是最近这些修复的成本越来越高,这表明对原框架做出改变的难度越来越大。

为从根本上解决旧 MapReduce 框架的性能瓶颈,促进 Hadoop 框架的更长远发展,从 0.23.0 版本开始,Hadoop 的 MapReduce 框架完全重构,发生了根本的变化。新的 Hadoop MapReduce 框架命名为 MapReduceV2 或者叫 Yarn,其架构图如下图所示:


图 2. 新的 Hadoop MapReduce 框架(Yarn)架构
图 2. 新的 Hadoop MapReduce 框架(Yarn)架构

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

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

上图中 ResourceManager 支持分层级的应用队列,这些队列享有集群一定比例的资源。从某种意义上讲它就是一个纯粹的调度器,它在执行过程中不对应用进行监控和状态跟踪。同样,它也不能重启因应用失败或者硬件错误而运行失败的任务。

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

上图中 NodeManager 是每一台机器框架的代理,是执行应用程序的容器,监控应用程序的资源使用情况 (CPU,内存,硬盘,网络 ) 并且向调度器汇报。

每一个应用的 ApplicationMaster 的职责有:向调度器索要适当的资源容器,运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。

相关问答

更多
  • mapreduce应该是指MapReduce吧,是一种编程模式,用于大规模数据的并行计算。 Spark作为名词是火花的意思,作为动词是产生,触发,发出火星,强烈赞同,正常运转的意思 Yarn做为名词是纱线,故事的意思,作为动词是讲故事的意思。 因此,这三者之间没有任何联系啊,所有的意思都是区别。
  • (1) Hadoop 1.0   第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中,HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成,对应Hadoop版本为Hadoop 1.x和0.21.X,0.22.x。   (2) Hadoop 2.0   第二代Hadoop,为克服Hadoop 1.0中HDFS和MapReduce存在的各种问题而提出的。针对Hadoop 1.0中的单NameN ...
  • 如果你在谈论Hadoop wiki上的WordCount示例,那么没有区别。 您可以使用MRv1和MRv2编译和运行,而无需修改任何单行的源代码。 您只需要包含正确的类路径,如下所示: javac -cp `hadoop classpath` WordCount.java 要记住的一件事是WordCount只是Hadoop的HelloWorld示例,这意味着您可以根据需要以各种方式实现它。 实际上,您可以看到Hadoop 2.1.0中的实现已经与您在Hadoop wiki上看到的实现不同 If you a ...
  • 您需要在yarn-site.xml配置给YARN及其容器的内存量: yarn.nodemanager.resource.memory-mb 4096 yarn.scheduler.minimum-allocation-mb 1024 检查此示例yarn-site.xml文件。 当您运行Ma ...
  • 如果您从Hadoop文档中查看此图片: 您会发现没有特定的“作业编排”组件,而是一个资源请求组件,称为应用程序主控。 正如你所提到的,YARN执行资源管理,并且在应用程序编排方面,它停止在抽象级别。 每个应用程序的ApplicationMaster实际上是一个特定于框架的库 ,并负责从ResourceManager协商资源,并与NodeManager一起工作来执行和监视这些任务 。 当应用于Spark时,该图片中的某些组件将是: 客户:火花提交过程 App Master:运行驱动程序和应用程序主控(集群模式 ...
  • 亚马逊EC2已经准备好按时间租用Hadoop集群,即使是玩游戏也不是很贵。 其他方法是使用Cloudera Hadoop VM http://www.cloudera.com/downloads/virtual-machine/ 。 您可以在多个虚拟机上运行群集。 Amazon EC2 has ready to use Hadoop cluster for per time rent, not very expensive even for play. Other way is to play with C ...
  • 在启动后namenode脱离安全模式之前,Job正在启动。 在namenode离开safemode后启动作业将解决此问题。 Job is being kicked off before namenode is out of safemode after startup. Starting job after namenode leaves safemode will fix the issue.
  • 在我看来,jhm不会在hadoop集群上发挥作用,因为在集群的每个节点中,基准测试都需要启动一个自己的jvm。 这不起作用,节点进行并行化通信。 首先,我测量执行程序的时间并重复此操作,最后我计算出容错。 import java.util.ArrayList; import java.util.List; import java.util.Properties; public class MapReduceBenchmarkLauncher { private static List ...
  • 如果使用本地地图并且reduce任务在同一个jvm中运行。 通常在我们想要调试代码时使用此模式。 然而,如果我们使用MRV2中的纱线资源管理器,并且映射器和缩减器将在不同的节点和不同的jvms中运行,并且在同一节点中(如果它是伪分布式模式)。 If you use local the map and reduce tasks are run in the same jvm. Usually this mode is used when we want to debug the code. Whereas i ...
  • 我不确定它是哪个配置属性但是当我从集群中获取配置并创建一个配置对象时,它工作得很好。 I am not exactly sure which configuration property it was but when I took the cofiguration from cluster and create a Configuration objects out of that than it works just fine.