mapreduce的执行过程

wordcount

  • 关于切片
    划分maptask任务,由客户端(提交job)完成,写入文件交给mr appmaster。这里的任务切片是一个逻辑片,和hdfs的block是不同的概念。对于大文件,切片一般按照block的大小来切,方便后续执行maptask时数据的读取。对于一些小文件,需要把多个block切成一片。一个切片对应一个maptask实例。切片由fileinputformat中的getSplit()来完成,结果写入切片规划文件。切片大小(由minsize,maxsize,blocksize几个值决定)的逻辑:Math.max(minSize,Math.min(maxSize,blockSize))。参数在conf中设置。

  • 关于mapreduce中的序列化
    map和reduce的输出都需要经过传输和实体化存储,所以都需要让它实现一个序列化框架,hadoop里面有一个内置的序列化框架writable。输出的所有数据都需要实现writable接口。如果输出不是它内置的数据类型(比如text,longwritable,intwritrable),而是我们一个自定义的对象,就必须去实现writable接口。

  • mapreduce全过程
    mapreduce中通过InputFormat组件来读取数据。我们读入的数据是什么,后续处理的数据时什么完全取决于这个接口。它把外部的数据源与内部的处理逻辑完全解耦。InputFormat默认读取文本文件的组件是:TextInputformat。maptask读取数据时我们调用其成员RecordReader的read()方法,取得kv对返回给Mapper中的map()方法。

InputFormat

map()方法中是我们自定义的业务逻辑,执行完逻辑后context.write(k,v)。把map过后的结果交给Outputcollector。OutputCollector把数据写入环形缓冲区(就是一个环形数组)。环形缓冲区中有一个保留区来进行分区排序。
分区排序实现:
默认分区是:HashPartitioner(hashcode模除以2(这个数字可以用来调整分区数))。排序:quicksort和外部排序混合使用。Key.compareTo。
缓冲区中的数据积累到一定阈值(如80%)通过spiller溢出(maptask完毕后还会有一次清空溢出)。溢出一次写一个文件,这些文件分区且有序。最后再merge这些文件(mergesort)形成一个maptask的最终文件。在这个文件中有几个分区就会有几个reducer,且这个分区与环形缓冲区中分区相对应。

shuffle

maptask结束后,开始reducetask。reducer到执行maptask的机器下载属于自己分区的数据到其本地磁盘工作目录,有几个maptask对应下载到几个文件。然后将这几个文件merge(mergesort)。reducer里自定义的reduce方法,对每一组key(相同key即为一组,通过GroupingComparator(k,nextk)组件判断key是否相同)。reduce(k,v)中一组中第一个传入的key作为k,value是一个可以迭代这一组value的迭代器。执行完自定义reduce()的逻辑后context.write(k,v)。然后调用OutputFormat(默认TextOutputFormat)中的RecordWriter中的write(k,v)方法把结果写入FileoutputFormat.setoutputpath(file://'xx')中。不同的reducer写出不同的文件,part-r00000,part-r00001……。

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

推荐阅读更多精彩内容