在Hadoop 1.0版本中,mapred.job.tracker决定了执行MapReduce程序的方式,若设置为local,则使用本地的作业运行器,若设置为主机:端口(eb179:9001),则该配置属性被解释为一个jobtracker地址;
在Hadoop 2.0版本中,用于执行的框架通过mapreduce.framework.name属性进行设置,值local表示本地的作业运行器,"classic"表示经典的MapReduce框架,yarn表示新的框架。

MapReduce2工作机制

对于节点数超过4000的大型集群,YARN改善了经典mapreduce面临的扩展瓶颈问题。

相关名词解释:

资源管理器(RM)

负责管理所有应用程序计算资源的分配。

应用管理器(AM)

每一个应用程序的AM负责相应的调度和协调。

容器

YARN为将来的资源隔离提出的框架,每一个任务对应一个容器,且只能在该容器中运行。

节点管理器

管理每个节点上的资源和任务,定期向RM汇报该节点的资源使用情况和各个容器的运行状态,接收并处理AM的任务启动、停止等请求。

工作机制


1、用户代码通过job.waitForCompletion(true)开启了该MapReduce作业的执行,创建Job类对象,调用submit()函数;submit()函数完成了如下操作:
2、向资源管理器获取新的作业ID,检查输出路径是否存在,计算输入分片,并将作业资源(包括作业jar、配置、分片信息)复制到HDFS,最后提交作业。
3、资源管理器收到作业请求后,便把请求传递给调度器,调度器分配一个容器,然后资源管理器在节点管理器的管理下在容器中启动应用程序的master进程。
4、master进程是一个java应用程序,它的主类是MRAppMaster,它对作业进行初始化:通过创建多个薄记对象以保持对作业进度的跟踪,因为它将接受来自任务的进度和完成报告。
5、master接受来自HDFS在客户端计算的输入分片,对每个分片创建一个map任务对象以及由mapreduce.job.reduces属性确定的多个reduce任务对象。
6、如果作业不适合在单个节点上运行,那么application master就会为该作业中的所有map任务和reduce任务向资源管理器请求容器,附着心跳信息的请求包括每个map任务的数据本地化信息,特别是输入分片所在的主机和相应机架信息,调度器使用这些信息来做调度决策,先数据本地化,再机架本地化。
MapReduce 1中,内存的分配对于集群是固定的(槽),不能充分利用内存;而在YARN中,资源分为更细的粒度,应用程序可以请求最小到最大限制范围的任意最小值倍数的内存容量,可以避免这个问题。
7、一旦资源管理器的调度器为任务分配了容器,application master就通过与节点管理器通信来启动容器,在运行任务之前,首先将任务所需要的资源本地化,包括作业的配置、jar文件和所有来自分布式缓存的文件,然后执行map任务或reduce任务。

进度和状态更新

在YARN运行时,任务每3秒钟向application master汇报进度和状态,客户端每秒钟查询一次application master以接收进度更新;除了向application master查询进度外,客户端每5秒钟还通过Job的waitForCompletion()来检查作业是否完成。作业完成后,application master和任务容器清理其工作状态。

YARN中的失败

任务运行失败

JVM运行时异常和突然退出会被反馈给application master,该任务尝试被标记为失败,如果失败次数超过3次(默认),则整个作业就失败了。

application master运行失败

应用程序失败也会有几次尝试的机会,可以设置yarn.resourcemanager.am.max-retries来增加允许失败的次数。
application master向资源管理器发送周期性的心跳,当application master发生故障时,资源管理器将检测到该故障并在一个新的容器(由节点管理器管理)中开始一个新的master实例。application master可以恢复故障应用程序所运行任务的状态,使其不必重新运行,而默认情况是不能恢复的,因此故障application master将重新运行它们的所有任务。
客户端向application master轮询进度报告,如果AM运行失败,客户端就需要定位新的实例,在作业初始化期间,客户端向资源管理器询问并缓存AM的地址,使其每次轮询时不必重载此地址,若AM失败,客户端请求超时,这时客户端会向资源管理器请求新的AM地址。

节点管理器运行失败

如果节点管理器失败,就会停止向资源管理器发送心跳信息并被移出可用资源管理池。如果失败次数过高,节点管理器会被拉黑,AM管理黑名单,如果一个节点管理器上有超过3个任务失败,AM就会尽量将任务调度到不同的节点上。

资源管理器运行失败

资源管理器失败是非常严重的问题,没有资源管理器,作业和任务容器将无法启动。如果资源管理器失败,由管理员启动一个新的资源管理器实例并恢复到保存的状态。状态由节点管理器和运行的应用程序组成。

作业的调度

MapReduce 1 的默认调度器是最初基于队列的FIFO调度器,可以设置优先级,但是优先级不支持抢占。
另外,还有两个多用户调度器。

公平调度器

公平调度器的目标是让每个用户公平共享集群的能力,公平调度器支持抢占机制,每个用户都有自己的作业池,如果一个池在特定的一段时间内未能公平共享资源,就会终止运行池中得到过多资源的任务,把空出来的任务槽让给资源不足的作业池。

容量调度器

集群由多个队列组成,这些队列可能是层次结构的(一个队列可能是另一个队列的子队列),每个队列被分配有一定的容量,这一点与公平调度器类似。不过在每个队列内部,作业根据FIFO(考虑优先级)进行调度。本质上,容量调度器允许用户或组织为每个用户模拟出一个使用FIFO调度策略的独立MapReduce集群,而公平调度器强制每个池公平共享作业共享池的资源。

MapReduce 2简介的更多相关文章

  1. MapReduce 计数器简介

    转自:http://my.oschina.net/leejun2005/blog/276891?utm_source=tuicool&utm_medium=referral 1.计数器 简介 ...

  2. MongoDB MapReduce用法简介

    Map-Reduce部分:Map-Reduce相当于关系型数据库中的group by,主要用于统计数据之用.MongoDB提供的Map-Reduce非常灵活,对于大规模数据分析也相当实用. 语法 db ...

  3. Hadoop mapreduce框架简介

    传统hadoop MapReduce架构(老架构)   从上图中可以清楚的看出原 MapReduce 程序的流程及设计思路:   1.首先用户程序 (JobClient) 提交了一个 job,job ...

  4. MapReduce模型简介

  5. 【云计算 Hadoop】Hadoop 版本 生态圈 MapReduce模型

    忘的差不多了, 先补概念, 然后开始搭建集群实战 ... . 一 Hadoop版本 和 生态圈 1. Hadoop版本 (1) Apache Hadoop版本介绍 Apache的开源项目开发流程 : ...

  6. MapReduce过程详解(基于hadoop2.x架构)

    本文基于hadoop2.x架构详细描述了mapreduce的执行过程,包括partition,combiner,shuffle等组件以及yarn平台与mapreduce编程模型的关系. mapredu ...

  7. Hadoop 版本 生态圈 MapReduce模型

    忘的差不多了, 先补概念, 然后开始搭建集群实战 ... . 一 Hadoop版本 和 生态圈 1. Hadoop版本 (1) Apache Hadoop版本介绍 Apache的开源项目开发流程 : ...

  8. [转] hadoop MapReduce实例解析-非常不错,讲解清晰

    来源:http://blog.csdn.net/liuxiaochen123/article/details/8786715?utm_source=tuicool 2013-04-11 10:15 4 ...

  9. Hadoop集群(第6期)_WordCount运行详解

    1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然 ...

随机推荐

  1. unittest可能面临的问题以及解决方法

    问题1:用例的执行顺序 当使用unittest.main()时,用例的执行是按照ascall值的顺序来执行的,所以如果使用main()方法来执行用例的话,那么就需要通过命名来限制执行顺序,比如想要先执 ...

  2. java 导出Excel文件

    最近在做一个文件导出功能,发现大部分博客上通过引用各种的util工具包,其实说白了还是利用apache的poi,在项目中直接导入poi包就可以.直面其原理,随个人喜好封装. 1.首先准备一些poi的j ...

  3. Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸

    一.引言 Android的开源使厂商无需自行研发OS,大大降低了研发.生产的成本,使得Android平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一丝希望.与此同时带来的是广大开发者的苦不堪言,各 ...

  4. iOS下载使用系统字体

    iOS下载使用系统字体 通用开发中一般使用系统默认的字体: 另外系统也提供了一些其他字体我们可以选择下载使用 1:在mac上打开 字体册 app 即可查找系统支持的字体,适用于ios上开发使用 从ma ...

  5. page,client,offset区别

    offset:相对于当前“盒子”的距离 ,与滚动条无关 client:相对于可视区域的距离,与滚动条无关 page:相对于整个页面的距离,与滚动条有关 示例代码: <!DOCTYPE html& ...

  6. 使用Python创建简单的HTTP和FTP服务

    不管工作中还是其他场合,经常会有文件分享的需求,比如自己下了一个4GB的游戏,同事下了一个800MB的软件,其他人如果也需要这些文件,显然直接分享是最快捷.最方便.最环保的方式了,如果再重新下,既浪费 ...

  7. JVM实用参数——新生代垃圾回收

    JVM实用参数目录 JVM实用参数——新生代垃圾回收 概述 第1部分  新生代垃圾回收介绍 第2部分 参数介绍 参考 第1部分  新生代垃圾回收介绍 本部分,我们将关注堆(heap) 中一个主要区域, ...

  8. jquery 获取下拉框值与select text

    下面先介绍了很多jquery获取select属性的方法,同时后面的实例我们讲的是jquery 获取下拉框值与select text代码. 下面先介绍了很多jquery获取select属性的方法,同时后 ...

  9. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  10. PR和VV的分类与区别

    Adobe Premiere是一款常用的视频编辑软件,由Adobe公司推出.现在常用的有CS4.CS5.CS6.CC.CC 2014及CC 2015版本.是一款编辑画面质量比较好的软件,有较好的兼容性 ...