5.2.1 模式描述

reduce端连接模式相对于其他连接模式来说用时最久的,但是它同时也是实现简单并且支持前一节所述的所有不同类型的连接操作。

目的

通过某个外键将多个大数据集连接起来。

动机

reduce端连接大概是所有MapReduce连接实现中最为简单的一种,因此通常是比较有吸引力的选择。用它可以非常容易地实现之前的任意一种连接操作,并且它对输入数据集的大小没有限制。同时,它可以根据用户的需要一次连接任意多的数据集。基于以上描述不难知道,因为大块的数据需要发送到reduce阶段,reduce端连接通常需要消耗大量的网络带宽。虽然这需要花些时间,但是,假如你有足够的资源并且在乎执行时间,就可以放心使用这个模式!另外不幸的是,如果所有的数据集都非常大,reduce端连接可能是你的唯一选择。

适用场景

  • 多个大数据集需要按一个外键做连接操作。如果除了一个数据集以外其他所有数据集都可以放入内存,可以尝试使用复制连接。
  • 你需要灵活地执行任意类型的连接操作。

结构

  • mapper为连接操作做准备工作:读取每个数据集中的每个输入记录,从记录中抽取其外键。外键作为输出键输出,整个输入记录作为输出值。同时,输出值通过一个数据集的唯一标识来标记。
  • 可以应用于基于散列的partitoner,或者创建自定义partitioner来发送到reduce端的中间结果键/值对分布得更均匀。
  • reducer通过收集每个输入分组的值并存入一个临时列表来执行需要的连接操作。

结果

输出的part结果文件的数目与reduce任务的数目相同。每一个part文件包含部分的连接后的结果记录。每个记录的列取决于它们在reducer中如何做连接。如果执行的外连接或者反连接,那么有些列的值可能是null。

性能分析

一个普通的reduce端连接会给集群网络带来很大的压力。因为要抽取每一个输入记录的外键并跟整条记录一起发送到reduce端,而且在发送之前不会对数据进行过滤,所以几乎所有的数据都会被发送到混排和排序阶段。基于这个原因,reduce端连接要比其他通常的分析使用更多的reducer。

results matching ""

    No results matching ""