在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. 做个这样的APP要多久?[转]

    这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着水杯,正对面坐着来访的王总,他是在别处打拼的人,这几年据说收获颇丰,见移动互联网如火如荼,自然也想着要 ...

  2. 《高级Web应用程序设计》课程学习资料

    任务1:什么是ASP.NET MVC 1.1  ASP.NET MVC简介 1.2 认识ASP.NET MVC项目结构 1.3 ASP.NET MVC生命周期 任务2:初识ASP.NET MVC项目开 ...

  3. Modify textures at runtime

    动态修改Texture Modify textures at runtime?http://answers.unity3d.com/questions/7906/modify-textures-at- ...

  4. Hibernate实现向数据库插入一条数据全过程(Study By Example)

    1.数据库(直接在cmd下进入数据库操作亦可) (1)启动Navicat for MySQL (2)打开连接,创建一个数据库,名为testdb (3)新建表user1,表结构如图所示 2.数据库池 ( ...

  5. 二模 (15)day2

    第一题:Alice和Bob两个人正在玩一个游戏,游戏有很多种任务,难度为p的任务(p是正整数),有1/2p 的概率完成并得到2p−1分,如果完成不了,得0分.一开始每人都是0分,从Alice开始轮流做 ...

  6. 通过cpu SN码注册软件类

    using System; using System.Management; namespace SoftReg { internal class SoftReg { #region 变量 ]; // ...

  7. hdu 1052 (greedy algorithm) 分类: hdoj 2015-06-18 16:49 35人阅读 评论(0) 收藏

    thanks to http://acm.hdu.edu.cn/discuss/problem/post/reply.php?action=support&postid=19638&m ...

  8. win7下用python3.3抓取网上图片并下载到本地

    这篇文章是看了网上有人写了之后,才去试试看的,但是因为我用的是python3.3,与python2.x有些不同,所以就写了下来,以供参考. get_webJpg.py #coding=utf-8 im ...

  9. 转换primitive主数据类型

    /*转换primitive主数据类型 * 短变长直接转换 * 长变短要强制转换 * 例如:long y = 42; int x = (int)y * String类型转换成primitive类型时可以 ...

  10. Get IP Address in Android 4.0+

    在android2.3以下的系统中,可以使用如下的代码来获取Android系统的本地IP地址: [java]  private String getLocalIPAddress() throws So ...