(升级版)MapReduce原理示例
2025-06-16 15:07:17 0 举报
带着示例,手绘,mapreduce原理
作者其他创作
大纲/内容
hello 1 crm 1 lei 1
MapTask
Split
qian 1 0lei 1 0
cheng 1 1xu 1 1
20%时,从中间划出赤道,KV和元数据存储方向不变
hdfs dfs -put
ReduceTask
1.start thread that will handle communication with parent2. check if it is a cleanupJobTask3. Initialize the codec4.Using ShuffleConsumerPlugin Shuffle(重要) fetcher拉取文件5.RawComparator(比较器)--分组比较器与排序比较器RawComparator comparator = job.getOutputValueGroupingComparator();6.runNewReducer(核心)6.1 make a task context so we can get the classes6.2 make a reducer6.3 reducer.run()7.other
nextKeyValue()方法
getPartition方法
磁盘
KV
磁盘(1号区)
第一版
获取p
磁盘文件Block
crm xu
yuan 2 qian 1
返回p
es:热服务mr:冷程序
xu 1 1
yuan xuhello yuan
对比一下原始文件qian chengxu leiyuan xuhello yuancrm xu
假设我们有一个文件,需要做单词统计
20%的保留空间
FileInputFormat
List<InputSplit> getSplits(JobContext job)
Merger合并组件
缓冲数组存至80%
写入磁盘
HashPartitioner类(分区器)
Reducer类
yuan 1 0yuan 1 0hello 1 0
MyMapper.map()
map()举例说明:1.key=pos不关心,2.value=qian cheng3.value按空格拆分成qian和cheng两个词,写入上下文context.write(单词,1)
抓取器(fetcher)
qian chengxu lei
第三版
while (context.nextKey())
qian 1cheng 1xu 1lei 1
元数据从赤道向箭头方向
ReduceContextImpl
有很重要的一件事情是:“理解nextKeyIsSame”在context.netxtKey()方法中包括以下几件事:1.将k,v赋值2.判断同一组数据中是否已到最后一行,即依据nextKeyIsSame来判断
run方法
分别加载到迭代器中
磁盘(0号区)
KV存储从赤道向箭头方向
第二版
crm 1 0
代码位置在MapTask中的sortAndSpill()中
MapOutputBuffer类
MapTask.SpillThread内部类
sortAndSpill()这里不建议花太多时间去看源码
Mapper
run()
map()方法
经过combine后处理为
0号区的所有数据
初始赤道,
LineRecordReader.nextKeyValue()
key = posvalue = readLine
调用
快速排序
qian 1 0cheng 1 1xu 1 1lei 1 0
通过key获取分区标记p
hello 1 crm 1 lei 1
注意:本图为便于大家入门理解,忽略CombinerCombine可理解为MapTask端的Reducecombine要非常谨慎的使用,如本例“求和”可使用,但如“求平均数”则会导致计算错误
HDFS
cheng 1xu 3
reduce方法
GroupingComparetor分组器
qian 1 0lei 1 0yuan 1 0yuan 1 0hello 1 0crm 1 0
SpillThread
cheng 1 1xu 1 1xu 1 1xu 1 1
hello 1 crm 1 lei 1 qian 1 yuan 1 yuan 1
80%溢写:排序=比较,排序移动的是元数据块,文件里数据有序,内存数组里数据块不动仍无序
例如
yuan 1 0yuan 1 0hello 1 0
排序比较器:-1,0,1分组比较器:true,false
1
yuan 1 yuan 1 qian 1
在这个例子中,两组数据reduce结果为:
ReduceTask(0号区)
环形缓冲数组kvBuffer
元数据
hello 1crm 1lei 1yuan 2qian 1cheng 1 xu 3
qian chengxu leiyuan xuhello yuancrm xu
yuan 2 0hello 1 0

收藏
0 条评论
下一页