08 | MapReduce如何让数据完成一次旅行?

MapReduce 编程模型将大数据计算过程切分为 Map 和 Reduce 两个阶段,在 Map 阶段为每个数据块分配一个 Map 计算任务,然后将所有 map 输出的 Key 进行合并,相同的 Key 及其对应的 Value 发送给同一个 Reduce 任务去处理。

 

程序是如何在分布式集群中运行起来的呢?MapReduce 程序又是如何找到相应的数据并进行计算的呢?答案就是需要 MapReduce 计算框架来完成。

具体来说,它们分别是 MapReduce 作业启动和运行,以及 MapReduce 数据合并与连接。

 

MapReduce 作业启动和运行机制

 MapReduce运行过程涉及三类关键进程。

 

 

 

 计算过程,概括如下:

 

 

MapReduce 数据合并与连接机制

MapReduce 计算真正产生奇迹的地方是数据的合并与连接。

在 map 输出与 reduce 输入之间,MapReduce 计算框架处理数据合并与连接操作,这个操作有个专门的词汇叫shuffle。

 

 

 /** Use {@link Object#hashCode()} to partition. */ 
public int getPartition(K2 key, V2 value, int numReduceTasks) { 
    return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; 
 }

分布式计算需要将不同服务器上的相关数据合并到一起进行下一步计算,这就是 shuffle。

 

只要是大数据批处理计算,一定都会有 shuffle 过程,只有让数据关联起来,数据的内在关系和价值才会呈现出来。

 

posted on 2019-05-04 19:36  wzc521  阅读(126)  评论(0)    收藏  举报

导航