文章目录
MR的原理和运行流程
Map的运行过程
Reduce处理过程
Shuffle过程
MR运行过程
Yarn && Job
MR的原理和运行流程
Map的运行过程
以HDFS上的文件作为默认输入源为例(MR也可以有其他的输入源)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-419qFeIb-1589376928673)(https://github.com/jiaoqiyuan/163-bigdate-note/raw/master/%E6%97%A5%E5%BF%97%E8%A7%A3%E6%9E%90%E5%8F%8A%E8%AE%A1%E7%AE%97%EF%BC%9AMR/img/Map%E8%BF%90%E8%A1%8C%E8%BF%87%E7%A8%8B.png “”)]
block是HDFS上的文件块,split是文件的分片(逻辑划分,不包含具体数据,只包含这些数据的位置信息)。
一个split包含一个或多个block,默认是一对一的关系。
一个split不包含两个文件的block, 不会跨越file边界,也就是说一个split是不会跨文件进行划分的。
当分片完成后,MR程序会将split中的数据以K/V(key/value)的形式读取出来,然后将这些数据交给用户自定义的Map函数进行处理。
一个Map处理一个split。
用户用Map函数处理完数据后将处理后,同样将结果以K/V的形式交给MR的计算框架。
MR计算框架会将不同的数据划分成不同的partition,数据相同的多个partition最后会分到同一个reduce节点上面进行处理,也就是说一类partition对应一个reduce。
Map默认使用Hash算法对key值进行Hash计算,这样保证了相同key值的数据能够划分到相同的partition中,同时也保证了不同的partition之间的数据量时大致相当的,参考链接
一个程序中Map和Reduce的数量是有split和partition的数据决定的。
Reduce处理过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yDsRinfZ-1589376928676)(https://github.com/jiaoqiyuan/163-bigdate-note/raw/master/%E6%97%A5%E5%BF%97%E8%A7%A3%E6%9E%90%E5%8F%8A%E8%AE%A1%E7%AE%97%EF%BC%9AMR/img/Reduce%E5%A4%84%E7%90%86%E8%BF%87%E7%A8%8B.png “”)]
Map处理完后,reduce处理程序在各个Map节点将属于自己的数据拷贝到自己的内存缓冲区中
最后将这些数据合并成一个大的数据集,并且按照key值进行聚合,把聚合后的value值作为一个迭代器给用户使用。
用户使用自定义的reduce函数处理完迭代器中的数据后,一般把结果以K/V的格式存储到HDFS上的文件中。
Shuffle过程
在上面介绍的MR过程中,还存在一个shuffle过程,发生与Map和Reduce之中。