Hadoop---mapreduce架构概念

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

先来举个栗子:
假如让你统计一个院子的车,统计每个品牌的车有多少个?你会怎么没去统计。
铁蛋来了,说soeasy,从前统计到后,累成狗。
那么,现在的扩大了,统计一个县城,或者一个区,你怎么去做。
铁蛋叫来了他的狐朋狗友,铁柱,二虎,波仔,妞妞,小花等等。一个人负责一个院子。让后每人统计好,最会汇总。
那么,是不是很快也很简单。
铁蛋又拍着胸脯吹了个牛说。别说一个县,只要朋友多,那都不是事。
这里我们是不是将事情分布,并且最后进行汇总。接下来进入主题。

MapReduce

为什么叫MapReduce,不叫小XXOO,apache ss,等。
MapTask—并行,比如铁蛋的多个朋友同时出去统计车。
ReduceTask----汇总, 统计完每个人的然后汇总。就是整个最后的结果。
在这里插入图片描述
1.1图片水平来看------------------>
一个input输入端,一个output输出端,mapTask的输出是reduceTask的输入。只有mapTask统计完了,reduceTask才能统计。线性依赖。
1.2图片垂直来看------------------>
map有三个,reduce有两个。map就是铁蛋的朋友,朋友越多执行效率越快。reduce也可以有多个。根据我们的需求。
1.3流程
Hdfs—map----reduce----hdfs
注意点:
一个切片对应一个map。切片是逻辑范围的。默认一个block,一个split,一个map。
但是比如说你的文件需要128M才能分析出东西。block是64M,这里就是需要两个block,有个split,有个map。split是灵活的。
split输入以记录为单位(默认一条记录是一行)记录可能是多种。
输入(格式化k,v)----数据集map映射成个中间数据集(k,v)-----reduce
(1)map数量
由split决定,split有数据特征来决定,怎样去计算。
(2)renduce数量
第一个栗子:铁蛋的朋友统计完了,需要铁蛋去统计,所有人把数量都给他,但是铁蛋这家伙懒,出了一个帮手虎子,统计的时候呢,有的人改了虎子,有的人给了铁蛋。那统计完依然不是一个完整的数据。看看我们的图片,reduce完成之后去了哪里。没有了。所以reduce的数量根据需求决定。
不明白?你急
第二个栗子:我们让铁蛋统计一个县城的男女的资料,最后铁蛋一个人统计可以不,可以挺累的。虎子统计男的。铁蛋统计女的。这样是不是轻松些。效率快。这需要两个reduce,那么三个可以不,可以,一个男,一个女,另外一个只能是空。如果有了,是不是和第一个栗子一样。
reduce数量有mapj计算出来的多少种数据来决定,比如车,就一种,一个reduce。
重点理解:
“相同”的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算
什么意思呢?
比如一个reduce,我们统计男女,男女是两个key,所有男为一组调用一个reduce,在女为一组调用一个reduce,这一组一组的处理。
两个reduce,一个放男,另外一个就不能为男。破坏了以组为单位的调用reduce。
总结
block > split
1:1 默认
N:1 切片放大
1:N 一条记录一个切片
split > map
1:1 必须
map > reduce
N:1 一个reduce合计
N:N 多种数据
1:1
1:N 一条记录假设1000条,1000条有四组数据。
group(key)>partition
1:1
N:1
N:N
1:N? >违背
partition > outputfile
在这里插入图片描述
流程:

猜你喜欢

转载自blog.csdn.net/power_k/article/details/92395267