在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. SQL Server显式事务与隐式事务

    事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分.如果事务遇到错误且必须取消或回滚,则所有数据库修改均被清除. SQL Server中有一下几 ...

  2. css学习笔记 1

    对于一个页面,如何控制页面的结构就看如何去理解css的各个属性了,只有了解了css的各个属性后才能更有效的让css控制页面的任何一个结构. css的结构:选择符:{属性名1:属性值; 属性名2:属性值 ...

  3. ring0

    Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3. RING0层拥有最 ...

  4. javascript错误处理与调试(转)

    JavaScript 在错误处理调试上一直是它的软肋,如果脚本出错,给出的提示经常也让人摸不着头脑. ECMAScript 第 3 版为了解决这个问题引入了 try...catch 和 throw 语 ...

  5. cf

    Financing a capital project with equity may be a signal to investors that a company's prospects are ...

  6. JDE Client开发端 左侧边栏设置

  7. linux 的 磁盘操作

    //显示目录和文件 以kb m g为单位 du -ah //总大小 du -sh /etc //查看分区 fdisk -l //对磁盘进行分区 fdisk /dev/sdb //格式化分区 mkfs ...

  8. SSH框架之一详解maven搭建多模块项目

    闲来无事,思量着自己搭建一个ssh框架,一来回顾熟悉一下ssh的内容,hibernate还就没用过了,生疏了都.二来整合一下,将其他掌握的和正在学习的框架核技术糅合到一起,就当是做一个demo练手了. ...

  9. cocopods 知识集合 及 一个 好的 国外iOS技术翻译站

    http://www.exiatian.com/cocoapods%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8%E5%8F%8A%E9%85%8D%E7%BD%AE%E7% ...

  10. 视频1-14待JSP课程看完再练习

    视频1-14待JSP课程看完再练习 http://www.imooc.com/video/5555