将文本文件的记录与mapreduce中同一文件中的所有其他记录连接起来

but5z9lq  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(233)

这篇文章xrds:article in “权衡示例”小节描述了将每个记录与输入文件的所有其他记录连接起来的方法(第一种方法)。我想知道,在mapreduce中,如果不在一个Map器中传递整个输入文件,怎么可能做到这一点。

n53p2ov0

n53p2ov01#

mapreduce有三种主要的连接类型(还有其他几种)。
reduce side join—对于这两个数据集,都输出“外键”作为Map器的输出键。您可以使用类似于多个输入的方法一次加载两个数据集。在reducer中,来自两个数据集的数据通过外键组合在一起,这允许您在那里执行连接逻辑(比如笛卡尔积)。这是通用的,适用于几乎所有情况。
复制联接—将较小的数据集推出到distributedcache中。在每一件事情中,您都要将较小的数据集从那里加载到内存中。当记录通过Map器时,将数据与内存中的数据集连接起来。这就是你在问题中的建议。只有当较小的数据集可以存储在内存中时,才应该使用它。
复合连接-这个有点小,因为它需要设置。如果两个数据集按外键排序和分区,则可以使用compositeinputformat进行复合联接。它基本上做了一个类似于合并的操作,非常有效。
我的书mapreduce design patterns的无耻插件:关于连接有一整章(第5章)。
请在此处查看本书的代码示例:https://github.com/adamjshook/mapreducepatterns/tree/master/mrdp/src/main/java/mrdp/ch5

相关问题