MapReduce中源码分析(map端及reduce端的过程)

MapReduce中的源码分析:

map端的源码分析:

MapReduce阶段,map中key面向文章的偏移量=上一行面向文章的偏移量+本行相对于上一行的偏移量+本单词相对于本行的偏移量。

这个key为本单词相对于文章的偏移量

这个是MapReduce中map的输出,调用context的write方法,前边对应的是key,后边对应的是value的值。

在方法被调用的时候,方法中参数的传递有两种:值传递和应用传递

应用传递,传递的是地址

 以上这种是值传递,外部的值不会跟着内部的值的变化而变化的

int a=3;
    {
    a=5
    }
a=3
//方法的实现体中对a进行重新赋值
//外部的a=3不会随着内部a=5的变化而变化的

int a=3;
    {
    *a=5
    }
a=5
//内部的a传递的是外部的a的应用地址
Integer a= new Integer a
{
a=5
}
a=5
//这种传递是应用传递,传递的是堆内存中对象的应用地址

这种就是应用传递了。

 放在这个地方是为了避免频繁地GC

输入数据集由map映射成中间数据集,也就是映射成了(K,V)键值对的形式

中间数据集最终交给reduce去完成

reduce端从map端拉取数据,reduce的输入来自map的输出

map端完成的是计算向数据移动的过程,map的输出会存在map的主机,供reduce从map端拉取数据的,也就是抽象的名词叫做shuffle,也就是reduce端数据向计算移动的过程,而map端完成的是计算向数据移动的过程。

reduce端完成的是数据向计算移动的过程 

reduce端分析:

reduce端的输入正好是map端的输出

 

map端的run方法:

 

源语中:相同的key为一组,这一组key调用一次reduce方法。

reduce中的run方法:

 

reduce端做的事情:

shuffle是从map端copy一份数据过来的。

 

shuffle就是reduce从map端拷贝数据的过程

 有的人认为是从map端的(k,v) p进入缓冲区,然后排序,归并等,最后到reduce端拉取,排序等都叫做shuffle

MapReduce中map端的接口:

 

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/82820868