MapReduce任务解析

在YARN上一个MapReduce任务叫做一个Job。

一个Job的主程序在MapReduce框架上实现的应用名称叫MRAppMaster.

MapReduce任务的Timeline

这是一个MapReduce作业运行时间:

  • Map 阶段:依据数据块会运行多个Map Task
  • Reduce 阶段:依据配置项会运行多个Reduce Task

为提高Shuffle效率Reduce阶段会在Map阶段结束之前就開始。(直到全部MapTask完毕之后ReduceTask才干完毕。由于每一个ReduceTask依赖全部的MapTask的结果)

Map阶段

首先看看Map阶段,一个Job须要多少Map Task吧

用户会提交什么?

当一个client提交的应用时会提供下面多种类型的信息到YARN上。

  • 一个configuration(配置项):Hadoop有默认的配置项,所以即使什么都不写它也有默认的配置项载入。

    优先级高到低顺序是用户指定的配置项>etc/conf下的XML>默认配置项

  • 一个JAR包
    • 一个map()实现(Map抽象类的实现)
    • 一个combiner
      实现(combiner抽象类的实现,默认是跟Reduce实现一样)
    • 一个reduce()实现(Reduce抽象类的实现)
  • 输出输入信息:
    • 输入文件夹:输入文件夹的指定。如输入HDFS上的文件夹、S3或是多少个文件。
    • 输出文件夹:输出文件夹的指定。在HDFS还是在S3。

输入文件夹中的文件数用于决定一个Job的MapTask的数量。

那么究竟会有多少个MapTask呢?

Application Master会为每个split(分片)创建一个MapTask。通常情况下,每个文件都会是一个split。

假设文件太大(大于128M、HDFS默认块大小)就会分为多个split并关联到这个文件,也就是一个文件会产生多个Map
Task。获取split数量方法代码例如以下 getSplits() of the FileInputFormat class:

num_splits = 0
for each input file f:
remaining = f.length
while remaining / split_size > split_slope:
num_splits += 1
remaining -= split_size
split_slope = 1.1
split_size =~ dfs.blocksize

MapTask运行过程

Application Master会向Resource Maneger资源管理器提交job所须要的资源:为每个split文件申请一个container来执行Map
Task。

为了提高文件读取效率container在map split所在的机器上执行是最为理想的。因此AM会依据数据本地性>CPU>内存匹配的方式分配container

  • 假设发现一个Node Manager上有所需的map split那么相关的container就会分配到这个NM上(由于依据HDFS备份机制有3台机器上同一时候拥有同样的块);
  • 否则, 会分配到机柜内的其它机器上;
  • 否则, 会分配到集群上的不论什么一个机器上

当容器被分配给AM时Map Task任务就会启动。

Map 阶段:演示样例

这是一个典型的Map运行场景:

  • 有2个Node Manager:每一个Node
    Manager拥有2GB内存,而每一个MapTask须要1GB内存。因此每一个NM能够同一时候执行2个container
  • 没有其它的应用程序在集群中执行
  • 我们的job有9个split
    (比如,在输入文件夹里有8个文件。但当中仅仅有一个是大于HDFS块大小的文件,所以我们把它分为2个map
    split);因此须要9个map

MapTask运行的Timeline

如今让我们专注于一个Map Task任务。这是Map Task任务运行时间线:

  • 初始化(INIT)阶段:初始化Map Task(默认是什么都没有。。

  • 运行(EXECUTION)阶段: 对于每一个 (key, value)运行map()函数
  • 排序(SPILLING)阶段:map输出会暂存到内存其中排序,当缓存达到一定程度时会写到磁盘上。并删除内存里的数据
  • SHUFFLE 阶段:排序结束后,会合并全部map输出,并分区传输给reduce。

MapTask:初始化(INIT)

1. 创建一个Task上下文,Reduce也继承自它(TaskAttemptContext.class)

2. 创建MAP实例 Mapper.class

3. 设置input (e.g., InputFormat.class, InputSplit.class, RecordReader.class)

4. 设置output (NewOutputCollector.class)

5. 创建mapper的上下文(MapContext.class, Mapper.Context.class)

6. 初始化输入。比如

7. 创建一个SplitLineReader.class object

8. 创建一个HdfsDataInputStream.class object

MapTask:运行(EXECUTION)

Map的运行阶段从 Mapper class的run 方法開始,我们通常要写的也就是它了。默认情况下run之前会调用setup方法:这个函数没有做不论什么事情。可是我们能够重写它来配置相关的类变量等信息。运行setup方法之后会对每个<key,
value>运行map()函数。

之后map context会存储这些数据到一个缓存区。为兴许排序做准备。

当map运行完处理时。还会调用一个clean方法:默认情况下,也不运行不论什么操作,但用户也能够重写它。

MapTask:排序(SPILLING)

运行阶段期间map会把数据写进一个缓存区(MapTask.MapOutputBuffer)。这个缓存大小由配置项设定mapreduce.task.io.sort.mb 
(默认:100MB)。为了提高硬盘刷写速度缓存区达到80%会写数据到磁盘,会有一个单独的线程并行运行。当缓存区容量达到100%那么就要等到这个单独的线程把数据写完才干继续运行map方法。

排序线程会运行下面动作:

1. 创建一个SpillRecord和一个FSOutputStream (在本地文件系统)

2. 在内存中对键值对进行高速排序

3. 分区

4. 按顺序写入本地分区文件。

Shuffle阶段

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

shuffle阶段主要是做数据的排序和合并操作。然后把数据存到本地文件系统上,等待Reduce来获取数据。等到全部的MapTask产出的传输数据都Reduce机器上。并对数据进行排序以后才干算是Shuffle过程的结束。

也就说从Map函数出来之后到Reduce函数之前的全部数据操作都叫Shuffle操作。包含排序、合并、分区、传输等。

Reduce阶段

Reduce阶段的run与Map阶段的run运行是类似的。

ref:http://ercoppa.github.io/HadoopInternals/AnatomyMapReduceJob.html


MapReduce框架在Yarn上的具体解释的更多相关文章

  1. 经典MapReduce作业和Yarn上MapReduce作业运行机制

    一.经典MapReduce的作业运行机制 如下图是经典MapReduce作业的工作原理: 1.1 经典MapReduce作业的实体 经典MapReduce作业运行过程包含的实体: 客户端,提交MapR ...

  2. Apache Hadoop下一代MapReduce框架(YARN)简介 (Apache Hadoop NextGen MapReduce (YARN))

    英文看着头大,先试着翻译一下. E文原文:http://archive.cloudera.com/cdh5/cdh/5/hadoop/hadoop-yarn/hadoop-yarn-site/YARN ...

  3. Hadoop 新 MapReduce 框架 Yarn 详解【转】

    [转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/] 简介: 本文介绍了 Hadoop 自 0.23.0 版本 ...

  4. 更快、更强——解析Hadoop新一代MapReduce框架Yarn(CSDN)

    摘要:本文介绍了Hadoop 自0.23.0版本后新的MapReduce框架(Yarn)原理.优势.运作机制和配置方法等:着重介绍新的Yarn框架相对于原框架的差异及改进. 编者按:对于业界的大数据存 ...

  5. Hadoop mapreduce框架简介

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

  6. Hadoop 新 MapReduce 框架 Yarn 详解

    Hadoop 新 MapReduce 框架 Yarn 详解: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ Ap ...

  7. mapreduce on yarn简单内存分配解释

    关于mapreduce程序运行在yarn上时内存的分配一直是一个让我蒙圈的事情,单独查任何一个资料都不能很好的理解透彻.于是,最近查了大量的资料,综合各种解释,终于理解到了一个比较清晰的程度,在这里将 ...

  8. 运行在YARN上的MapReduce应用程序(以MapReduce为例)

    client作用:提交一个应用程序查看一个应用程序的运行状态(通过application master) 第一步:提交MR程序到ResourceManager,ResourceManager为这个应用 ...

  9. Hadoop 系列文章(三) 配置部署启动YARN及在YARN上运行MapReduce程序

    这篇文章里我们将用配置 YARN,在 YARN 上运行 MapReduce. 1.修改 yarn-env.sh 环境变量里的 JAVA_HOME 路径 [bamboo@hadoop-senior ha ...

随机推荐

  1. Java分页内容实例详解

    首先定义一个fruit表,表里含有很多数据: 定义一个数据文件: public class Fruit { public String getIds() { return ids; } public ...

  2. Welcome-to-Swift-21协议(Protocols)

    协议定义了一个方法的蓝图,属性和其他适合特定任务或功能的要求.协议实际上并不提供一个这些要求的实现,它只是描述了一个实现会是什么样子.协议可以通过一个类,结构或枚举提供这些要求的具体实现.满足要求的任 ...

  3. 一步一步,完成sparkMLlib对日志文件的处理(1)

    https://blog.csdn.net/u012834750/article/details/81014997    初学第一天,当然是完成helloWorld啦,有点艰难,2个小时,在idea, ...

  4. 网络编程之IO复用:select or epoll

    对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接.同时处理 ...

  5. [luoguP2774] 方格取数问题(最大点权独立集)

    传送门 引入两个概念: 最小点权覆盖集:满足每一条边的两个端点至少选一个的最小权点集. 最大点权独立集:满足每一条边的两个端点最多选一个的最大权点集. 现在对网格染色,使得相邻两点颜色不同,之后把两个 ...

  6. BZOJ2302 [HAOI2011]Problem c 【dp】

    题目 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1,a ...

  7. 浅谈android反调试之 签名校验

    反调试原理 很多时候,我们都需要进行修改修改应用程序的指令,然后重打包运行,重新打包就需要充签名. 利用签名的变化我们用于反调试.反调试实现代码如下: 为了更加隐藏,比较函数可能在SO层进行实现,如下 ...

  8. Eclipse + Jersey 发布RESTful WebService(一)了解Maven和Jersey,创建一个WS项目(成功!)

    一.下文中需要的资源地址汇总 Maven Apache Maven网站 http://maven.apache.org/ Maven下载地址: http://maven.apache.org/down ...

  9. UVa12333 Revenge of Fibonacci

    高精度 trie 暴力预处理出前100000个fibonacci数,将每个数的前40位数字串插入到trie中,记录每个结点最早可以由哪个数字串到达. 然后依次回答询问即可. 存fibonacci数的数 ...

  10. 【Vijos1534】高性能计算机(DP)

    题意:有NA个A与NB个B两种任务需要完成,完成一段长度为X的A任务需要时间ta+ka*x*x,B任务类似,连续的同一种任务不能分成两段运行 有P台可以并行运算的计算机,求最快完成所有任务的时间 1≤ ...