Haddop:Mapreduce

Hadoop的核心思想之一是mapreduce(分布式计算框架)
Compute:计算层(处理层)
HDFS:分治

一、What? 什么是MR

1、过滤性别为0的
循环处理每行记录,切割性别列,进行过滤
2、转换码值为字典值
read line,切割性别列,进行转换
3、展开字段为复合值
read line,切割性别列,进行转换

简单概括:
MAP:以一条记录为单位做映射。
REDUCE:以一组记录为单位做计算。
什么叫一组?分组!
分组依赖一种数据格式:key:value
k,v的实现:MAP实现的

1、思考:为啥叫MapReduce?

  • Map
    映射、变换、过滤
    一进N出
  • Reduce
    分解、缩小、归纳
    一组进N出
  • (KEY,VAL)
    键值对的键划分数据分组

2、MapReduce逻辑架构

MapReduce逻辑架构

1)蓝色框(方法)
2)虚线框(任务task)
3)part分区(包含若干组)
4)Split分片:逻辑划分,不包含具体数据,只包含这些数据的位置信息,一个Split只会包含一个File的block,不会跨文件

块、切片、map、reduce、组、分区的关系:

1)bloock:split=1:1,1:N,N:1,
2)split:map=1:1
3)map:reduce=N:1,1:1,N:N,1:N
4)group(key):partiton=1:1,N:1,N:N

总结:

MR:数据以一条记录为单位,经过map方法映射成kv键值对,相同的key为一组,这一组数据调用一次reduce方法,在方法内迭代计算一组数据。(迭代器模式)

经验:数据集一般是用迭代计算的方式

详情:map到reduce线性发展顺序关系。map并行度,由计算层切片split的数量决定(可调的窗口机制,split默认=Block(文件),一般不会调),split与map为1:1的关系,切片split里面要格式化format出一条记录,以一条记录为单位调用一次map方法(map方法以记录为单位调用),map的输出是k,v(kv完成分组的事情,相同的k为一组,一组数据调用一次reduce方法,一组数据不能被破坏),每个reduce拉取属于自己的分区的数据(一个reduce任务一个分区,每个分区包含若干组),reduce的个数由人决定(reduce并行度)。

1.一个map只会处理一个Split
2.map处理完的数据会分成不同的partition
3.一类partition对应一个reduce
那么一个mr程序中 map的数量是由split的数量决定的,reduce的数量是由partiton的数量决定的。

3、MapReduce执行过程

MapReduce执行过程

1、input split:切片会格式化出记录,以记录为单位调用map方法
2、map:map的输出映射成kv,kv会参与一次分区计算,拿着key算出P分区号,最终输出k,v,p(相同的k,p是一样的)
3、buffer内存缓冲区:默认为100M,分区排序,内部有序外部无序,先快速排序后归并排序
4、内存缓冲区溢写磁盘时做一个2次排序,分区有序,且分区内key有序,未来相同的一组key会相邻的排在一起。一次写入(一次用户态与内核态的切换)
5、map Task的输出是一个文件,存在本地文件系统中
6、reduce的归并排序其实可以和reduce方法的计算同时进行,尽量减少IO,因为有迭代器模式的支持。

迭代器模式是批量计算中非常优美的实现形式。

Mapreduce的执行步骤:

MapReduce的执行过程主要包含是三个阶段:Map阶段、Shuffle阶段、Reduce阶段

一、Map任务处理
1)读取HDFS中的文件,每一行解析成一个。每一个键值对调用一次map函数。
2)覆盖map(),接收1.1产生的,进行处理,转换为新的输出。
3)对1.2输出的进行分区。默认分为一个区。
4)对不同分区中的数据进行排序(按照k)、分组。分组指的是相同的key的value放到一个集合中。排序后<hello,1> <hello,1> <me,1> <you,1> 分组后:<hello,{1,1}><me,{1}><you,{1}>
5)(可选)对分组后的数据进行归约。

二、Shuffle
Shuffle,翻译成中文是混洗。mr没有排序是没有灵魂的,shuffle是mr中非常重要的一个过程。他在Map执行完,Reduce执行前发生。

Shuffle阶段横跨Map端和Reduce端,在Map端包括Spill过程,在Reduce端包括copy和merge/sort过程。通常认为Shuffle阶段就是将map的输出作为reduce的输入的过程。

1、Map阶段的shuffle
数据经过用户自定的map函数处理完成之后,数据会放入内存中的环形缓冲区之内,他分为两个部分,数据区和索引区。数据区是存放用户真实的数据,索引区存放数据对应的key值,partition和位置信息。当环形缓冲区数据达到一定的比例后,会将数据溢写到一个文件之中,即途中的spill(溢写)过程。
在溢写前,会将数据根据key和partition进行排序,排好序之后会将数据区的数据按照顺序一个个写入文件之中。这样就能保证文件中数据是按照key和parttition进行排序的。最后会将溢写出的一个个小文件合并成一个大的文件,并且保证在每一个partition中是按照Key值有序的。

总结:
Collect阶段将数据放进环形缓冲区,缓冲区分为数据区和索引区。
Sort阶段对在同一partition内的索引按照key排序。
Spill阶段跟胡排好序的索引将数据按照顺序写到文件中。
Merge阶段将Spill生成的小文件分批合并排序成一个大文件。

2、Reduce阶段的shuffle
reduce节点会将数据拷贝到自己的buffer缓存区中,当缓存区中的数据达到一定的比例的时候,同样会发生溢写过程,我们任然要保证每一个溢写的文件是有序的。与此同时,后台会启一个线程,将这些小文件合并成一个大文件,经过一轮又一轮的合并,最后将这些文件合并成一个大的数据集。在这个数据集中,数据是有序的,相同的key值对应的value值是挨在一起的。最后,将这些数据交给reduce程序进行聚合处理。

总结:
Copy阶段将Map端的数据分批拷贝到Reduce的缓冲区。
Spill阶段将内存缓存区的数据按顺序写到文件中。
Merge阶段将溢出的文件合并成一个排序的数据集。

三、Reduce任务处理
1)多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点上。
2)对多个map的输出进行合并、排序。覆盖reduce函数,接收的是分组后的数据,实现自己的业务逻辑, 
处理后,产生新的输出。
3)对reduce输出的写到HDFS中。

参考资料:
https://www.cnblogs.com/lfxiao/p/10770051.html
https://www.jianshu.com/p/d1e7b4ff3810

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

推荐阅读更多精彩内容

  • Hadoop MapReduce 整个MR的过程可以分解为下面几步 读取数据 Map reduce output ...
    流浪山人阅读 595评论 0 1
  • shuffle过程 shuffle概念 shuffle的本意是洗牌、混洗的意思,把一组有规则的数据尽量打乱成无规则...
    专职掏大粪阅读 266评论 0 0
  • MapReduce(mr) -- 分布式计算框架 Hadoop -YARN Hadoop -HDFS 导读一....
    smart_Xu阅读 935评论 0 6
  • MapReduce 框架原理 3.1 InputFormat 数据输入 3.1.1 切片与 与 MapTask 并...
    pauls阅读 238评论 0 1
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 123,655评论 2 7