在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. 使用CSS3 BACKFACE-VISIBILITY属性制作翻转动画效果

    摘要: 通过backface-visibility:hidden;属性,我们可以使一个元素在翻转之后消失,这是可以使用另一个元素放在它的背面,从而制作出一种元素翻转之后出现另一个元素的效果. ... ...

  2. ASP.NET页面优化,提高载入速度[转]

      ASP.NET页面载入速度提高的一些做法: 1.采用 HTTP Module 控制页面的生命周期. 2.自定义Response.Filter得到输出流stream生成动态页面的静态内容(磁盘缓存) ...

  3. Python高效编程的19个技巧

    初识Python语言,觉得python满足了我上学时候对编程语言的所有要求.python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了.高级语言,如果做 ...

  4. js实现继承

    js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...

  5. iOS开发拓展篇—应用之间的跳转和数据传递

    iOS开发拓展篇—应用之间的跳转和数据传 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够 ...

  6. 32个触发事件XSS语句的总结

    1.onmouseenter:当鼠标进入选区执行代码 <div style="background-color:red" onmouseenter="alert(b ...

  7. Rhel6-pacemaker+drbd配置文档

    系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.119 server19.example.com 192.168.12 ...

  8. MATLAB 物体识别算法说明:vision.ForegroundDetector, vision.BlobAnalysis

    在官方示例中,Motion-Based Multiple Object Tracking和Using Kalman Filter for Object Tracking都使用了下面两个算法进行物体的识 ...

  9. 实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端

    转自:http://www.cnblogs.com/fengyun99/p/3541254.html 上一篇,介绍了二维码生成的机制,紧接着,我们就要开发手机客户端来识别这个二维码. 二维码,实际上是 ...

  10. 微信第三方 授权方账户信息 API文档错误

    获取授权方的账户信息 该API用于获取授权方的公众号基本信息,包括头像.昵称.帐号类型.认证类型.微信号.原始ID和二维码图片URL. 需要特别记录授权方的帐号类型,在消息及事件推送时,对于不具备客服 ...