当前位置:必发365电子游戏 > Web前端 > 假设待分析的数据文件是一个用户名和密码的表,将计算大数据的复杂任务分解成若干简单小任务
假设待分析的数据文件是一个用户名和密码的表,将计算大数据的复杂任务分解成若干简单小任务
2019-12-19

引子

干什么须求MapReduce?

因为MapReduce能够“分而治之”,将总括大数量的复杂职务分解成若干归纳小职责。“轻松”的情趣是:总括范围变小、就近节点总结数据、并行职务。

下边摆放一张《Hadoop权威指南》的流程图

【一句话版本】

输入文件 ->【map任务】split --> map --> partition --> sort --> combine(写内部存款和储蓄器缓冲区) ~~ spill(独立线程写磁盘) --> merge --> map输出结果  ~~~ 【reduce任务】copy --> merge -->reduce --> 输出文件

Hadoop的MapReduce进度具犹如下格局:

Map阶段

split:文件首先会被切开成split,split和block的涉嫌是1:1只怕N:1,如下图所示。

map :

M个map职务初始并行管理分配到的七个split数据。输出数据格式如 <k,v>。

Partition:

功效:将map阶段的输出分配给相应的reducer,partition数 == reducer数

暗中认可是HashPartitioner。之后将出口数据<k,v,partition>写入内部存款和储蓄器缓冲区memory buff。

spill:

当memory buff的数据达到一定阈值时,暗中认可百分之七十,将出发溢写spill,先锁住这十分九的内存,将那部分数量写进本地球磁性盘,保存为八个有时文件。此阶段由独立线程序调整制,与写memory buff线程同步实行。

sort & combine:

在spill写文件在此之前,要对70%的数额(格式<k,v,partition>)进行排序,先partition后key,保险每一个分区内key有序,如若job设置了combine,则再实行combine操作,将<aa1,2,p1> <aa1,5,p1> 那样的数目统一成<aa1,7,p1>。 最后输出二个spill文件。

merge:

四个spill文件通过多路合并列排在一条线序,再统一成叁个文书,那是map阶段的末段输出。同不经常间还大概有贰个索引文件(file.out.index),记录每种partition的伊始地方、长度。

          1) map: (K1, V1) => list(K2, V2)
          2) reduce: (K2, list(V2)) => list(K3, V3)

reduce阶段

copy:三十四线程并发从各种mapper上拉归于本reducer的数据块(根据partition),获取后存入内部存款和储蓄器缓冲区,使用率高达阈值时写入磁盘。

merge:一贯运营,由于分歧map的输出文件是平昔不sort的,由此在写入磁盘前须要merge,知道未有新的map端数据写入。最终运营merge对具备磁盘中的数据统一排序,变成贰个结尾文件作为reducer输入文件。至此shuffle阶段甘休。

reduce:和combine相通,都是将相像的key归总总计,最后结出写到HDFS上。

自己用二个回顾的例子表明它象征的含义:

假诺待分析的数据文件是二个客商名和密码的表,即"顾客名,密码"格式:

========= input.dat=========

zhang,123456

wang,qazxsw

liu,123456

meng,xxx123

hunan,qazxsw

chin,qazxsw

feifei,1008xyz

... ...

==========================

那么我们渴求总括出密码使用的次数超越1次的,即最后能够收获上边包车型大巴结果:

123456=2

qazxsw=3

用MapReduce能够如此做:

第1步:Map
protected void map(LongWritable key, Text value, Context context);

Map的输入(K1, V1卡塔尔(英语:State of Qatar)暗中认可是(文件行号,文件行卡塔尔(قطر‎,即map函数每一趟拿到的输入都以底下的样式:

(key=>K1, value=>V1)

第1次:(0,  "zhang,123456")

第2次:(1, "wang,qazxsw")

第3次:(2, "liu,123456")

第4次:(3, "meng,xxx123")

...

咱俩要求在map函数的value参数V1中,提抽取密码作为出口的K2=>key,而输出的value是1(次数),

意味着三个客商使用了这些密码=>K2。

map运营完后得到了上边包车型大巴结果:list(K2, V2卡塔尔,即:

假设待分析的数据文件是一个用户名和密码的表,将计算大数据的复杂任务分解成若干简单小任务。K2        (V2)

123456(1)

qazxsw(1)

123456(1)

xxx123(1)

qazxsw(1)

qazxsw(1)

1008xyz(1)

这几个输出被系统自动归总为K2=>list(V2卡塔尔,即:

123456=>(1,1)

qazxsw=>(1,1,1)

xxx123=>(1)

1008xyz=>(1)

本条(K2, list(V2卡塔尔(قطر‎卡塔尔 接着作为reduce的输入。

第2步:Reduce
protected void reduce(Text key, Iterable<IntWritable> values, Context context);

reduce函数的输入既然是key=K2, value=list(V2卡塔尔国,那么大家就足以把每一种K2下的list(v2卡塔尔的成分相加,获得上边包车型地铁结果:

123456=>(2)

qazxsw=>(3)

xxx123=>(1)

1008xyz=>(1)
我们只保留次数抢先1的,所以最终的reduce输出为:

123456=>(2)

qazxsw=>(3)

以此便是:list(K3, V3卡塔尔(英语:State of Qatar)。这里K3与K2类型风姿洒脱致,V3与V2类型意气风发致。

上述正是Map Reduce的全经过。

越来越多Hadoop相关音信见Hadoop 专项论题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

图片 1