MapReduce是什么?什么原理?

mapreduce工作流程

1.读取文件,从指定路径讲读取文件解析成键值对形式,key为行偏移量,value为每行数据;

2.自定义map逻辑,讲K1,V1转换成map逻辑的K2,V2输出;

3.分区:对K2,V2进行操作,相同数据类型的数据放到同一个区中,继承一个partitioner类;

4.排序:对不同分区的数据按照相同key排序,用到实体类封装时需要实现序列化接口writable,用到比较的话需要继承writablecomparable;

5.规约:对map端输出的K2,V2进行数据聚合,也就是combiner;

6.分组:相同key的value放到同一个集合中;

7.自定义reduce逻辑,将K2,V2,转换成新的k3,v3输出;

8.将k3,v3通过context上下文将数据进行保存;

栗子:

文件:test.txt

扫描二维码关注公众号,回复: 3733002 查看本文章

文件内容:

a b c

d f a

d a g

当test.txt输入之后,需要将数据进行拆分为K1(行偏移量),V1(每行数据)格式,即:

0,a b c

4, d f a

8, d a g

数据拆分完成之后,到map端将数据按照map端定义的逻辑进行映射为K2(单个数据值),V2(单个数据出现次数不累加统计),即:

a 1

b 1

c 1

d 1

f 1

a 1

d 1

a 1

g 1

combiner聚合阶段:

a ,{1,1,1}

b,{1}

c,{1}

d,{1,1}

f,{1}

g,{1}

renduce阶段:将K2,V2转成新的K3(单个数据),V3(单个数据出现次数累加之和),即:

a,3

b,1

c,1

d,2

f,1

g,1

简言之MapReduce就是“分而治之”,MapReduce分为Map,Reduce,map负责收集统计,只统计不计算,而reduce是负责将map传过来的数据进行计算整合输出!

猜你喜欢

转载自blog.csdn.net/Sunshine_2211468152/article/details/82690136