链接预排序和预分区过的数据

    Map-side joins 是最有效的技术,前面的两种 map-side 策略都要求其中有一个数据集可被加载到内存。可是,若是两个数据集都很大且没法”瘦身”而没法作到这一点时,该怎么办?在这种状况下,若是知足如下条件,则能够使用复合的 map-side join:ide

  • 两个数据集都没法总体加载到内存中.orm

  • 两个数据集都按 join key 排好了序blog

  • 每一个数据集都有相同的文件数.排序

  • 在每一个数据集中的 File N 都包含相同的 join key K.内存

  • 每一个文件的大小都小于一个 HDFS block,这样分区时不会被 split者,或者用于该数据的 input split不会切分该文件。input

下图显示了一个排序的和分区的文件的例子,这些文件能够用于复合链接。it

应用场景:
想要在排序的、分区的数据上执行一个 map-side join。解决方案:
使用 MapReduce 自带的 CompositeInputFormat。CompositeInputFormat 功能至关强大,而且支持内链接和外链接。map

相关文章
相关标签/搜索