如何在java中编写MR代码时决定何时使用Map-Side Join或Reduce-Side?

时间:2015-04-19 19:22:10

标签: hadoop mapreduce hadoop-streaming

如何在java中编写MR代码时决定何时使用Map-Side Join或Reduce-Side?

2 个答案:

答案 0 :(得分:2)

Map side join在数据到达Map之前执行连接。在映射端加入数据之前,Map函数需要强大的先决条件。这两种方法都有一些优点和缺点。与reduce方面相比,Map side join是有效的,但它需要严格的格式。

先决条件:

  • 应以特定方式对数据进行分区和排序。
  • 每个输入数据应划分为相同的分区数。
  • 必须使用相同的密钥进行排序。
  • 特定密钥的所有记录必须位于同一分区中。

Reduce side join也称为Repartitioned join或Repartitioned sort merge join,它也主要用于join类型。 它将不得不经历排序和洗牌阶段,这将导致网络开销。减少侧连接使用很少的术语,如数据源,标签和组密钥让我们熟悉它。

  • 数据源指的是数据源文件,可能来自RDBMS
  • 标签将用于标记每个记录的源名称,以便在任何给定的时间点识别它的源,如果它在map / reduce阶段。为什么需要它将在以后报道。
  • 组密钥是指在两个数据源之间用作连接密钥的列。

正如我们所知,我们将在减少方面加入这些数据,我们必须以可用于加入减少阶段的方式进行准备。让我们来看看需要执行的步骤。

有关更多信息,请查看此链接: http://hadoopinterviews.com/map-side-join-reduce-side-join/

答案 1 :(得分:1)

如果您的某个表可以放入内存中,您将使用mapside join,这将减少排序和随机数据的开销。

Reduce-Side连接比Map-Side连接更简单,因为不需要构造输入数据集。但两个数据集的效率都较低 通过MapReduce shuffle阶段。具有相同键的记录在减速器中汇集在一起​​。