MapReduce与yarn的理解与区别

2019-03-20 11:25|来源: 网路

一.Hadoop1.0中MapReduce的组成

1.从功能模块角度
  • 客户端:提交MapReduce作业;

  • JobTracker:

1.作业调度:将一个作业(Job)分成若干个子任务分发到taskTraker中去执行

2.任务监控:TaskTracker发送心跳给JobTracker报告自己的运行状态,以让JobTracker能够监控到他

3.资源管理:每个任务向JobTracker申请资源

4.监控过程中发现失败或者运行过慢的任务,对他进行重新启动

  • TaskTraker:

主动发送心跳给jobTracker并与JobTracker他通信,从而接受到JobTracker发送过来需要执行的任务

2.从架构的角度
  1. 编程模型(新旧API)

  2. 运行环境(JobTracker和TaksTracker)

  3. 数据处理引擎(MapTask和ReduceTask)

二.MapReduce(hadoop1.0)的资源管理模型

2.1MapReduce的资源组成由两部分组成
  • 资源表示模型

用于描述资源表示形式,Hadoop1.0使用“槽位(slot)”组织各个节点的资源,为了简化资源的管理,Hadoop将各个节点上资源(CPU、内存、网络IO、磁盘IO等等)等量切分成若干份,每一份用“slot”表示,同时规定一个task可根据实际情况需要占用多个”slot”。

简单的说:hadoop1.0将多维度的资源进行了抽象,使用“slot”来表示,从而简化对资源的管理。

  • 资源分配模型

而资源分配模型则决定如何将资源分配给各个作业/任务,在Hadoop中,这一部分由一个插拔式的调度器完成。

更进一步说,slot相当于运行的“许可证”,一个任务只有获得“许可证”后,才能够获得运行的机会,这也意味着,每一个节点上的slot的数量决定了当前节点能够并发执行多少个任务。Hadoop1.0为了区分MapTask跟ReduceTask所使用资源的差异,进一步将slot分为MapSlot跟ReduceSlot,他们分别只能被MapTask跟ReduceTask使用。

Hadoop集群管理员可根据各个节点硬件配置和应用特点为它们分配不同的map slot数(由参数mapred.tasktracker.map.tasks.maximum指定)和reduce slot数(由参数mapred.tasktrackerreduce.tasks.maximum指定)

2.2Hadoop1.0资源管理的缺点
  1. 静态资源配置。采用了静态资源设置策略,即每个节点事先配置好可用的slot总数,这些slot数目一旦启动后无法再动态修改。

  2. 资源无法共享。Hadoop 1.0将slot分为Map slot和Reduce slot两种,且不允许共享。对于一个作业,刚开始运行时,Map slot资源紧缺而Reduce slot空闲,当Map Task全部运行完成后,Reduce slot紧缺而Map slot空闲。很明显,这种区分slot类别的资源管理方案在一定程度上降低了slot的利用率。

  3. 资源划分粒度过大。资源划分粒度过大,往往会造成节点资源利用率过高或者过低 ,比如,管理员事先规划好一个slot代表2GB内存和1个CPU,如果一个应用程序的任务只需要1GB内存,则会产生“资源碎片”,从而降低集群资源的利用率,同样,如果一个应用程序的任务需要3GB内存,则会隐式地抢占其他任务的资源,从而产生资源抢占现象,可能导致集群利用率过高。

  4. 没引入有效的资源隔离机制。Hadoop 1.0仅采用了基于jvm的资源隔离机制,这种方式仍过于粗糙,很多资源,比如CPU,无法进行隔离,这会造成同一个节点上的任务之间干扰严重。

三.Yarn的资源管理模型

 在实际系统中,资源本身是多维度的,包括CPU、内存、网络I/O和磁盘I/O等,因此,如果想精确控制资源分配,不能再有slot的概念,最直接的方法就是是让任务直接向调度器申请自己需要的资源(比如某个任务可申请1GB 内存和1个CPU),而调度器则按照任务实际需求为其精细地分配对应的资源量,不再简单的将一个Slot分配给它,Hadoop 2.0正式采用了这种基于真实资源量的资源分配方案。

  MRv2最基本的设计思想是将JobTracker的两个主要功能,即资源管理和作业调度/监控分成两个独立的进程。全局的ResourceManager(RM)和与每个应用相关的ApplicationMaster(AM)。

“RM有两个组件组成:调度器(Scheduler)应用管理器(ApplicationsManager,ASM)”

如下图是官网提供的year架构图



3.1 Yarn的功能组成模块

  调度器是个可插拔的组件,负责作业的调度并将集群中的资源分配给应用。YARN自带了多个资源调度器,如Capacity Scheduler和Fair Scheduler等。

   ASM:负责接收任务,并指定AS运行的节点NM节点,同时启动AM

  • NM:是每个节点上的资源管理,负责处理来自RM的命令,处理AM的命令,主动发送心跳给RM,让RM能够监控NM的运行状态。

  • AM:就是我们的应用(应用可以是mapduce程序或者DAG有向无环图)

  • Container:是YARN中资源的抽象,将操作系统中多维度的资源(CPU、内存、网络I/O和磁盘I/O等)封装成container,是Year中资源的基本单位

3.2 应用在Yarn中的运行流程
  1. 客户端提交一个应用程序AM到ResourceManager上

  2. ResourceManager先与集群中NodeManager通信,根据集群中NodeManger的资源   使用情况,确定运行AM的NodeManager;

  3. 确定了运行的节点后,AM马上向RM申请资源,资源被封装成Container的形式响应给AM,申请到资源后和确定了执行的NM后,RM马上在NM上启动AM

  4. 所有任务运行完成后,ApplicationMaster向ResourceManager注销,整个应用程序运行结束。

四.MapReduce1与MapRreduce2的区别

 如果从MapReduce的功能模块去区分他们,会比较乱,很难直观的说清楚,如果从MapReduce的系统架构入手,这个问题就变得简单了

MapReduce1从架构的角度可以分为三个部分

  1. 编程模型(新旧API)

  2. 运行环境(JobTracker和TaskTracker)

  3. 数据处理引擎(MapTask和ReduceTask)

MapReduce2从架构的角度可以分为三个部分

  1. 编程模型(新旧API)

  2. 运行环境(Yarn)

  3. 数据处理引擎(MapTask和ReduceTask)

从架构可以很清楚区分到,他们之间的区别主要在运行环境变了!

  • 大小: 144.7 KB

转自:http://eksliang.iteye.com/blog/2228705

相关问答

更多
  • 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 ...
  • 您可以使用Yarn(MRv2)编译为MRv1编写的程序,而无需修改任何单行的源代码。 它完全兼容源代码。 这是纱线示例: http : //wiki.apache.org/hadoop/WordCount 这是Map Red 1示例: https : //hadoop.apache.org/docs/r1.2.1/mapred_tutorial.html#Example%3A+WordCount+v1.0 API级别需要注意的一些明显差异: - 新API使用接口上的抽象类 - mapreduce包是不同的 ...
  • 如果你在谈论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:运行驱动程序和应用程序主控(集群模式 ...
  • 如果使用本地地图并且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 ...
  • 你是对的,“纱线”代表MRv2。 “经典”用于MRv1,“本地”用于MR作业的本地运行。 但为什么你需要MRv1? 纱线现在不在测试阶段,它比旧的MRv1框架更稳定,而您的MapReduce作业仍然可以使用旧的“mapred”API You are right, "yarn" stands for MRv2. "classic" is for MRv1 and "local" for local runs of the MR jobs. But why do you need MRv1? Yarn is o ...
  • 我最终解析了jobId,删除了'job'前缀并添加了'application'前缀,因为看起来applicationId没有为mapreduce作业公开,它与具有不同前缀的jobId基本相同。 这是一个hacky方法,但现在工作。 I ended up parsing the jobId, removing 'job' prefix and adding 'application' prefix as it appears applicationId is not exposed for mapreduce ...