[大牛翻译系列]Hadoop(2)MapReduce 连接:复制连接(Replication join)

时间:2023-03-09 22:01:07
[大牛翻译系列]Hadoop(2)MapReduce 连接:复制连接(Replication join)

4.1.2 复制连接(Replication join)

复制连接是map端的连接。复制连接得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点。复制连接有一个假设前提:在被连接的数据集中,有一个数据集足够小到可以缓存在内存中。

如图4.5所示,MapReduce复制连接工作原理如下:

  1. 使用分布式缓存(Districubted cache)将这个小数据集复制到所有运行map任务的节点。
  2. 用各个map任务初始化方法将这个小数据集装载到一个哈希表(hashtable)中。
  3. 逐条用大数据集中的记录遍历这个哈希表,逐个判断是否符合连接条件。
  4. 输出符合连接条件的结果。

[大牛翻译系列]Hadoop(2)MapReduce 连接:复制连接(Replication join)

复制连接的实现非常直接明了。更具体的内容可以参考《Hadoop in Action》。附录D.2提供了一个通用的框架来实现复制连接(http://www.cnblogs.com/datacloud/p/3617078.html)。这个框架支持任意类型的InputFormat和OutputFormat的数据。(我们将在下一个技术中使用这个框架。)复制连接框架根据内存足迹的大小从分布式缓存的内容和输入块(input split)两者中动态地决定需要缓存的对象。

如果所有的输入数据集都不能够小到可以放到缓存中,那有没有办法来优化map端连接呢?那就到了看半连接(semi-join)的时间了。