MapReduce概念

MapReduce概念 - 我的学习成长日记 - 博客频道 - CSDN.NET
http://blog.csdn.net/onlyqi/article/details/50477899

参考原文: http://code.google.com/intl/zh-CN/edu/parallel/mapreduce-tutorial.html
MapReduce其实是两个分离的阶段:map和reduce。首先看一个简单的例子: 现需要计算1w篇文章中字母‘w’的数量。这些文章以键值对(key/value)的形式存储(表一):
DocumentID(key)
DocumentContent(Value)

1
“This is an article”//假设这篇文章中含有“w”字母5个

2
“This is another article”// 含有“w”字母8个

.
“…”

.
“…”

10000
“This is the last article” //含有“w”字母9个

下面是一段伪代码:
map(String key, String value): // key: document ID // value: document contents for each word w in value: EmitIntermediate(w, “1”);

map函数将被应用到每一个键值对。因此第一次调用为map(1, “This is a article”),最后一次是map(10000, “This is the last article”)。全部map函数运行完毕后,将输出一个中间结果集(表二):
字母
次数

w
“5” //第一次调用的结果

w
“8” //第二次调用的结果

.
.

.
.

w
“9” //第1w次

该结果集接下来交给reduce函数:
reduce(String key, Iterator values): // key: a word,”W” // values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result));

reduce函数将被应用到每一个要查询的字母上。在此例中只有一个,”w”。此时只调用一次, reduce(“w”, [“5”, “8”…..”9”])。reduce做的仅仅是将数列中的所有数字相加,就得到了1w篇文章中w字母的个数。处理完成。 从上例我们可以总结出MapReduce的过程:
Map 首先,因为map是对每一个键值对分别进行计算(即,map函数用来分别统计每一篇文章中w的个数),而文章与文章之间没有什么关联。因此map函数可以实现很高的并行度,map函数的调用可以被灵活分散到多个服务器。 map的输入一般是:(k1, v1)。如上例为(int DocumentID, string ArticleContent),输出是(k2, v2)。如上例是(“W”, 次数). 因此输出结果的key:k2通常不再是k1。k1的信息在大部分情况下并不需要,所以会被丢弃。例如我们通常不再需要DocumentID了。
Reduce reduce函数实际的作用是汇总。此时对于字母w,reduce函数的工作已不能再被划分(只有一次调用),因此reduce的并行度并不高。但想象一下,现在的工作是统计1w篇文章中“word“, ”hello“, ”good“….”no“等1w个单词出现的次数,就会需要1w次reduce调用。因此reduce在执行大量复杂任务时,仍然能实现很高的并行度。 reduce的输入一般是(k2, list(v2))。上例中即为(string Word, list count). 输出为(k3, v3)。在上例中reduce函数就是将list sum了一下,所以k2=k3。但并非所有的应用都是这样的。

至此,对map和reduce给出概念 MapReduce是一种批处理计算范型。它可以简单的分为Map和reduce阶段。该范型特别适合在分布式集群上执行计算任务。 Map 函数,由用户编写,处理输入的键值对,输出一系列键值对形式的中间结果。 Reduce函数,也由用户编写,将键值对形式的中间结果作为输入参数。它按key将value merge到一起(可以是求和,求平均值等多种操作),形成一个较小的结果集。 注意在实际应用中,map函数和reduce函数都可以有多个,被称为mapper和reducer。
在实际的MapReduce分布式计算系统(以Hadoop为例)中,为了加快大数据处理,会经过如下更复杂的过程。需要注意的是,用户必须定义的只有Map和reduce函数,其他的步骤(函数)都是分布式计算系统自动完成的。

这里写图片描述

数据分片阶段Splitting:The MapReduce library in the user program first shards the input files into M pieces of typically 16MB to 64 MB per piece. It then starts up many copies of the program on a clusterof machines. 上图中数据被分成3份,并分配给3个Mapper处理。 One of the copies of the program is special: the master. The rest are workers that are assigned workby the master. There are M map tasks and R reduce tasks to assign. The master picks idle workers and assigns each one a map task or a reduce task. 注意数据处理开始前,Mapper和Reducer的数量就已经决定了,且可以由系统自动产生,也可以用户自行指定数量。
Mapping阶段:A worker who is assigned a map task reads the contents of the corresponding input shard. It parses key/value pairs out of the input data and passes each pair to the user-defined Map function. The intermediate key/value pairs produced by the Map function are buffered in memory.
Combiner函数:Map阶段后,可以对每个mapper的中间结果做一个简单的合并。例如将一个map worker的输入(表二)汇总成(w,“567”)这样的形式,进而提高后续步骤的效率。当一个node的mapper函数输出后,就会调用Combiner将mapper的输出结果整合且合并仅仅发生在单个Mapper的中间结果内部。
Shuffle和Partition阶段:该阶段的目的是将中间结果分区,且分区的数量是由reducer(记为R)决定的。也就是说,如果有4个reducer,那么就一定会将数据分成4个partition,以便很容易的将partition分配给reducer做进一步处理。分区一般采取的是哈希取模法,即根据key计算哈希值,然后对R取模。由此可知相同的key会被分到一个partition中(如果数据量太大则可能跨多个分区),因此该阶段也有shuffle的效果,既将相同key的数据整个到一起。由示意图可知这个过程由多个Mapper交互完成。
Reducer开始数据拉取:When a reduce worker is notified by the master about these locations, it uses remote procedure calls to read the buffered data from the local disks of the map workers.
拉取完成后,每个reducer对自己负责的数据排序。
The reduce worker iterates over the sorted intermediate data and for each unique intermediate key encountered,it passes the key and the corresponding set of intermediate values to the user’s Reduce function.The output of the Reduce function is appended to a final output file for this reduce partition.
When all map tasks and reduce tasks have been completed, the master wakes up the user program.At this point, the MapReduce call in the user program returns back to the user code. 需要注意的是,Mapper和reducer并非是一个机器一个。在一台机器上运行多个虚拟机就可以同时运行多个mapper和reducer。主控服务器决定有多少个mapper和reducer(也可由用户指定个数),以及如何给它们分配计算task。

MapReduce的缺点
MapReduce更适合非结构化数据的ETL处理类操作,且其可扩展性及容错性好,但是单机处理效率较低。
在系统从传统项目转换为MapReduce项目时,所有的数据操作逻辑都必须转换为Mapper和Reducer函数。尽管MapReduce提供了简洁的编程接口及完善的处理机制,使得大规模并发处理海量数据成为可能,但从发展趋势看,相对复杂的任务转换为MapReduce任务的开发效率还是不够高,所以其有逐步被封装到下层的趋势,即在上层系统提供更为简洁方便的开发接口,在底层由系统自动转换为大量MapReduce任务。
MapReduce本质上是由Map和Reduce序列两阶段构成。尽管Map和Reduce都支持大规模并发,但是由于在Map完成后有任务同步过程(例如 shuffle和partition),因此只有所有Map任务执行完成后才能开始Reduce过程。MapReduce对子任务间复杂的交互和依赖关系缺乏表达能力。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 摘自:http://staticor.io/post/hadoop/2016-01-23hadoop-defini...
    wangliang938阅读 560评论 0 1
  • 目的这篇教程从用户的角度出发,全面地介绍了Hadoop Map/Reduce框架的各个方面。先决条件请先确认Had...
    SeanC52111阅读 1,658评论 0 1
  • Hadoop-Mapreduce shuffle及优化 转载 MapReduce简介 在Hadoop MapRed...
    raincoffee阅读 2,183评论 1 9
  • 又是一个教师节! 特别的日子,刷刷朋友圈,总能看到秀爱徒的,秀红包的,秀祝福语的,秀一切可以传...
    菁菁_阅读 289评论 0 0
  • 去年冬天到现在,身体没舒服过,虽然看上去比以前好多了,但是我知道,身体的恢复还需要很久 十几年时间了,现在终于知道...
    黄向真阅读 234评论 0 0