在hadoop中。每一个mapreduce任务都会被初始化为一个Job。

每一个Job又能够分为两个阶段:map阶段和reduce阶段。这两个阶段分别用两个函数来表示,即map函数和reduce函数。map函数接收一个<key,value>形式的输入,然后产生相同为<key,value>形式的中间输出,hadoop会负责将全部具有相同中间key值的value集合到一起传递给reduce函数,reduce函数接收一个如<key,(list
of values)>形式的输入,然后对这个value集合进行处理并输出结果,reduce的输出 也是<key,value>形式的。

为了方便理解,分别将三个<key,value>对标记为<k1,v1>、<k2,v2>、<k3,v3>。那么上面所述的过程就能够用下图来表示了。

1、InputFormat()和InputSplit

InputSplit是hadoop中用来把输入数据传送给每一个单独map。InputSplit存储的并不是数据本身,而是一个分片长度和一个记录数据位置的数组。生成InputSplit的方法能够通过InputFormat()来设置。

当数据传送给map时,map会将输入分片传送到InputFormat()上,InputFormat()则调用getRecordReader()方法生成RecordReader。RecordReader再通过createKey()、createValue()方法创建可供map处理的<key,value>对,即<k1,v2>。简而言之,InputFormat()方法是用来生成可供map处理的<key,value>对的。

TextInputFormat是hadoop默认的输入方法,在TextInputFormat中,每一个文件(或当中一部分)都会单独作为map的输入,二这是继承自FileInputFoemat的。之后。每行数据都会生成一条记录。每条记录则表示成<key,value>形式:

key值是每一个数据的记录在数据分片中的字节偏移量,数据类型是LongWritable;

value值是每行的内容,数据类型是Text。

2、OutputFormat()

对于每一种输入格式都有一种输出格式与其相应。

相同,默认的输出格式是TextOutputFormat。这样的输出方式与输入类似,会将每条记录以一行的形式存入文本文件。

只是,他的键和值能够是随意形式的。由于程序内部会调用toString方法将键和值转化为string类型再输出。

3、map()

map()函数继承自MapReduceBase,而且它实现了Mapper接口,此接口是一个范型类型,它有4种形式的參数,分别用来指定Map()的输入key值类型、输入value值类型、输出key值类型和输出value值类型。

4、reduce()

与map()类似,reduce函数也继承自MapReduceBase,须要实现Reducer接口,Reduce函数以Map()的输出作为输入。

负责控制及调度MapReduce的Job的是JobTracker。负责运行MapReduce的Job的是TaskTracker。

当然,MapReduce在运行时是分成Map Task和Reduce Task来处理的,而不是完整的Job。

简单的控制流大概是这种:JobTracker调度任务给TaskTracker,TaskTracker运行任务时,会返回进度报告。

JobTracker则会记录进度的进行状况。假设某个TaskTracker上的任务运行失败。那么JobTracker会把这个任务分配给还有一台TaskTracker,直到任务运行完毕。

这里更具体的解释一下数据流。数据首先依照TextInputFormat形式被处理成多个InputSplit,然后输入到多个Map中,Map程序会读取InputSplit指定位置的数据,然后依照设定的方式处理该数据,最后写入到本地磁盘中,注意。这里并非写到HDFS上,这应该非常好理解,由于Map的输出在Job完毕后壳删除了。因此不须要存储到HDFS上,尽管存储到HDFS上会更安全,可是由于网络传输会减少MapReduce任务的运行效率,因此Map的输出文件时写在本地磁盘上的。

假设Map程序在没来得及将数据传送给Reduce时就崩溃了(程序出错或者机器崩溃),那么JobTracker仅仅须要另选一台机器又一次运行这个Task就能够了。

Reduce会读取Map的输出数据。合并value。然后将他们输出到HDFS上。

Reduce的输出会占用非常多的网络宽带,只是这与上传数据一样是不可避免的。

此外,还有两中情况须要注意:

1、MapReduce在运行过程中往往不止一个Reduce Task。Reduce Task的数量是能够程序指定的。

当存在多个Reduce Task时,每一个Reduce会搜集一个或多个key值。须要注意的是当出现多个Reduce Task时,每一个Reduce Task都会生成一个输出文件。

2、另外,没有Reduce任务的时候,系统会直接将Map的输出结果作为终于结果,同一时候Map Task的数量能够看做是Reduce Task的数量,即有多少个Map Task 就有多少个输出文件。

MapReduce运行流程具体解释的更多相关文章

  1. MapReduce运行流程分析

    研究MapReduce已经有一段时间了.起初是从分析WordCount程序开始,后来开始阅读Hadoop源码,自认为已经看清MapReduce的运行流程.现在把自己的理解贴出来,与大家分享,欢迎纠错. ...

  2. Hadoop Mapreduce运行流程

    Mapreduce的运算过程为两个阶段: 第一个阶段的map task相互独立,完全并行: 第二个阶段的reduce task也是相互独立,但依赖于上一阶段所有map task并发实例的输出: 这些t ...

  3. springmvc运行流程简单解释(源码解析,文末附自己画的流程图)

    首先看一下DispatcherServlet结构: 观察HandlerExecutionChain对象的创建与赋值,这个方法用来表示执行这个方法的整条链. 进入getHandler方法: 此时的变量h ...

  4. mapreduce运行机制

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt243 谈mapreduce运行机制,可以从很多不同的角度来描述,比如说从ma ...

  5. MapReduce运行原理

    MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各 ...

  6. hadoop笔记之MapReduce的运行流程

    MapReduce的运行流程 MapReduce的运行流程 基本概念: Job&Task:要完成一个作业(Job),就要分成很多个Task,Task又分为MapTask和ReduceTask ...

  7. [MapReduce_3] MapReduce 程序运行流程解析

    0. 说明 Word Count 程序运行流程解析 &&  MapReduce 程序运行流程解析 1. Word Count 程序运行流程解析 2. MapReduce 程序运行流程图

  8. hadoop运行流程分析源代码级

    前言: 最近一直在分析hadoop的运行流程,我们查阅了大量的资料,虽然从感性上对这个流程有了一个认识但是我总是感觉对mapreduce的运行还是没有一个全面的认识,所以决定从源代码级别对mapred ...

  9. Yarn应用程序运行流程剖析

    Yarn(Yet Another Resource Negotiator)是一个Hadoop集群资源管理系统,Hadoop2时被引入,旨在提高MapReduce的性能,但YARN已足够通用,使得它可以 ...

随机推荐

  1. 51nod 1413:权势二进制

    1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 一个十进制整数被叫做权势二进制,当他的十进制 ...

  2. [Angular] Upgrade existing Angular app to Progressive Web App

    If you alread have an existing Angular application and want to upgrade to progressive web app. 1. In ...

  3. [BZOJ 3884][欧拉定理]上帝与集合的正确使用方法

    看看我们机房某畸形写的题解:http://blog.csdn.net/sinat_27410769/article/details/46754209 此题为popoQQQ神犇所出,在此orz #inc ...

  4. 使用gridlayout布局后,因某些原因又删除,并整理文件夹结构时,Unable to resolve target &#39;android-7&#39;

    出现的问题 [2013-01-11 10:52:39 - gridlayout_v7] Unable to resolve target 'android-7' 事由:在一次做九宫格时.误使用了gri ...

  5. [Android中级]使用Commons-net-ftp来实现FTP上传、下载的功能

    本文属于学习分享,如有雷同纯属巧合 利用业余时间.学习一些实用的东西,假设手又有点贱的话.最好还是自己也跟着敲起来. 在android上能够通过自带的ftp组件来完毕各种功能.这次是由于项目中看到用了 ...

  6. 小P寻宝记——好基友一起走

    小P寻宝记--好基友一起走 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 话说.上次小P到伊利哇呀国旅行得到了一批宝藏.他是 ...

  7. emacs使用本地emacs server模式打开远程文件

    使用emacs的用户都知道,一般要打开远程机器上的文件要使用TrampMode模式,调用方式例如以下: C-x C-f /remotehost:filename RET (or /method:use ...

  8. QT5 Failed to load platform plugin &quot;windows&quot; 终极解决方式 命令行问题

    Failed to load platform plugin "windows" 这个错误在双击exe运行时不会出现,当传递命令行參数时出问题 ,解决方法: int main(in ...

  9. 均匀分布(uniform distribution)期望的最大似然估计(maximum likelihood estimation)

    maximum estimator method more known as MLE of a uniform distribution [0,θ] 区间上的均匀分布为例,独立同分布地采样样本 x1, ...

  10. 杂项-DB:DW/DWH(数据仓库)

    ylbtech-杂项-DB:DW/DWH(数据仓库) 数据仓库,英文名称为Data Warehouse,可简写为DW或DWH.数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合. ...