Hadoop-MapReduce运行机制

    MapRduce是hadoop中的一个分布式计算工具,分为map阶段和reduce阶段其采用了一个分而治之的思想
     以下一个例子作为演示,假设有一个涉及300M的文件(1.txt200m 2.txt 100m)
进行计算,求每个单词所占的个数


image.png
mapreduce_流程.png

Map阶段

image.png

1.首先进行逻辑切片,切片个数就是maptask启动的个数
2.maptask通过textinputformat按行读取分区当中的数据,结果是一个键值对<k1,v1> (k1是偏移量地址,value是具体的数据)
3,textinputformat将读取的键值对结果传个业务代码进行处理,处理的结果是一个新的键值对<k2,v2>
4,处理结果经过partition分区(默认只要一个)传送给缓冲区
5,缓冲区(默认大小100M)内的数据达到百分之八十,会产生一次数据溢出.溢出的数据经过排序存储到磁盘当中的一个临时文件
6,当区中数据处理完成后,会把所有的临时文件merge合并到一个最终结果文件

reduce阶段

image.png

1,reducetask拉取(copy)maptask最终的结果集
2,合并:把拉取的数据Merge合并成为一个文件
3,排序:按照对应key值进行排序
4,分组:key一样的分为一组
5,每个组都调用业务代码处理一次,处理完的数据是一个新的键值对
6,处理结果通过TextOutputformat 存储到磁盘指定位置

思考:maptask 个数与文件大小,文件个数,逻辑分区大小有关,分区大小默认为hdfs分块大小,可以改


shuffle过程

image.png

shuffle:指的是map产生输出到reduce取得数据输入之前的过程

map阶段:

collect收集:把数据写入缓冲区阶段写入的是partition分区信息和key/value
partition分区: 跟reducetask的个数有关,reduce task又跟业务需要有关可以自定义
spill 溢出:当缓存区的数据达到80%会溢出,溢出的数据从内存中写入磁盘,如果配置了combiner规 约会按照分区和规约进行排序
merge 合并:把磁盘当中的这些临时文件合并成一个总的结果文件

reduce阶段:

copy拉取数据
merge 合并
sort 排序
geouping 分组


拓展- partition分区的个数影响因素

image.png

默认情况下分区只有一个,reducetask只有一个意味着最终处理结果输出在一个文件上,此时没有分区的概念.

image.png

用户也可以根据需求去设置MR程序中reducetask的个数 job.setNumarenducetask(n>2)

此时对于maptask来说,处理完的数据到底要去哪里,这个问题就是partition分区问题
分区的默认规则:
哈希取余<key,value>
key.hash % reducetask 个数 -->余数(分区编号)

默认规则不能保证数据平均分配也无法保证是否符合业务需求,但是能保证key一样 分区一样

自定义规则:
根据具体需求定义

在Map任务和Reduce任务的过程中,一共发生了3次排序

1)当map函数产生输出时,会首先写入内存的环形缓冲区,当达到设定的阀值,在刷写磁盘之前,后台线程会将缓冲区的数据划分成相应的分区。在每个分区中,后台线程按键进行内排序

2)在Map任务完成之前,磁盘上存在多个已经分好区,并排好序的,大小和缓冲区一样的溢写文件,这时溢写文件将被合并成一个已分区且已排序的输出文件。由于溢写文件已经经过第一次排序,所有合并文件只需要再做一次排序即可使输出文件整体有序。

3)在reduce阶段,需要将多个Map任务的输出文件copy到ReduceTask中后合并,由于经过第二次排序,所以合并文件时只需再做一次排序即可使输出文件整体有序

在这3次排序中第一次是内存缓冲区做的内排序,使用的算法使快速排序,第二次排序和第三次排序都是在文件合并阶段发生的,使用的是归并排序。

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