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

标签 hadoop mapreduce hadoop-streaming

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

最佳答案

Map side join 在数据到达Map 之前执行join。在 map 端加入数据之前, map 功能需要一个强大的先决条件。这两种方法都有一些优点和缺点。 Map side join 与 reduce side 相比效率更高,但它需要严格的格式。

先决条件:

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

Reduce side join 也称为 Repartitioned join 或 Repartitioned sort merge join,也是最常用的连接类型。 它必须经过排序和洗牌阶段,这会产生网络开销。Reduce side join 使用的术语很少,例如数据源、标签和组 key ,让我们熟悉它。

  • Data Source指的是数据源文件,可能取自RDBMS
  • Tag 将用于标记每条记录的源名称,以便可以在任何给定时间点识别它的源,无论它处于 map/reduce 阶段。为什么需要它稍后会介绍。
  • 组键是指用作两个数据源之间的连接键的列。

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

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

关于hadoop - 在用 Java 编写 MR 代码时,如何决定何时使用 Map-Side Join 或 Reduce-Side?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29734690/

相关文章:

hadoop - 运行简单的hadoop程序时获取类强制转换异常

hadoop - 如何在hdfs中递归查找大于特定大小(x字节)的文件?

python - 将用于 mapreduce 的 Python 脚本传递给 HBase

hadoop - reducer 的默认数量

java - 接口(interface)作为Mapper值输出

perl - 将 Hadoop 流与 perl 结合使用以进行 map reduce

hadoop - HDFS复制因子

java - 如何从另一个 hadoop 作业提交 hadoop 作业

python - hadoop-streaming:作业完成后自动进行后处理吗?