03-MapReduce计算流程V2
2021-07-02 08:28:50 0 举报
Hadoop的MapReduce流程图
作者其他创作
大纲/内容
结果180M
单姓ALL
100M内存空间
结果380M
Split 切片64M
结果212M
map34
map3
map2
归并排序
Fetch
Map拆分计算
分区、快速排序、溢写
1113344556688
Block128M
结果ALL240M
百家姓复姓
拉取Fetch相同的key肯定会被拉取到同一个的Reduce但是一个Reduce可以拉取多个Key拉取后在Reduce端会产生多个小文件
output
计算机硬盘
结果38M
merge
临时结果达到环形缓冲区阈值 80%
Reduce
HDFS
溢写Spill将内存中有序的数据写出到磁盘
分区确定这个数据所对应的Reduce方便以后数据的拉取应该将相同分区的数据放在一起
复姓ALL
map4
map1
map12
结果ALL210M
根据分区号获取数据
Blockhdfs上数据存储的一个单元同一个文件中块的大小都是相同的 因为数据存储到HDFS上不可变,所以有可能块的数量和集群的计算能力不匹配 需要一个动态调整本次参与计算节点数量
KvBuffer环形数据缓冲器在有效的空间内 能够更加高效的在内存中执行操作默认 环形数据缓冲区 100M ,可写比例为80%
合并Merge临时结果会被溢写到磁盘磁盘会存在很多的溢写数据,大概每个数据是80M将来拉取数据的时候,每个块都要进行拉取,而且块的数目不固定所以需要进行合并磁盘块的数据所以可以对这些数据块进行归并操作将他们合并成一个大的有序的数据块
Map数据拆分计算默认每次读取一行数据(默认选择的行读取器)我们可以对这一行数据进行拆分操作整个集群会一起执行很多的Job,每个Job里面有很多的Task,Task又分为MapTask和ReduceTask所以每个Task必须合理分配计算机资源(计算能力 内存)默认情况下 一个MapTask对应的内存资源
Output需要将最终结果写出到存储(HDFS-Mysql-Redis)
正 双数
正 单数
合并 Merge将拉取后的小文件合并成大文件方便计算最终只需要合并到两个文件即可
ShuffleKvBuffer--Partation--Sort--Spill-Merge-Fetch-Merge1.环形数据缓冲区当Map读取数据后,会计算产生临时结果,为了效率肯定在内存中进行但是计算的临时结果超过内存的大小,我们不得不将内存的数据临时存放到硬盘如果每次等到内存消耗完毕在写出到硬盘,会有一个阻塞的时间因为在写出的时候是不能继续计算的2.分区 排序写出数据的时候我们需要对数据排序规则需要知道排序的算法3.溢写将内存中已经排序好的数据写出到硬盘4.合并合并溢写的文件方便拉取5.拉取就是将Map阶段合并的数据块中的结果拉取到对应的Reduce6.合并将从多个Map端拉取的数据合并到一起,方便操作
结果480M
Reduce相同Key的数据都在同一个Reduce中数据都是有序的相同key的数据都是相邻的计算的时候把相邻的数据取出来即可计算最终的结果
14381166855
结果27M
排序排序的规则:先按照分区排序,分区相同在按照Key的规则排序的算法:因为内存空间有限,必须选择快速排序
结果280M
File256M
百家姓单姓
结果ALL347M
结果350M
负 单数
负 双数
结果ALL92M
Block127M
收藏
0 条评论
下一页