hadoop中的联接和分布式缓存之间有什么区别?我真的对map端连接和reduce端连接感到困惑,这是如何工作的。在mapreduce作业中处理数据时分布式缓存有何不同?请与示例分享。
问候,
拉维

最佳答案

假设您有2个包含以下记录的数据文件:

词->频率

两个文件中可以存在相同的单词。
您的任务是合并这些文件,计算每个术语的总频率,并生成聚合的文件。

map 端加入。

当联接两边的数据已按键预先排序时,此选项很有用。在这种情况下,它是线性复杂度的两个流的简单合并。在我们的示例中,我们必须根据两个文件中的单词按字母顺序对单词频率数据进行预排序。

优点:适用于几乎无限的输入数据(不必容纳在内存中)。
不需要 reducer ,因此非常有效。

缺点:要求您对输入数据进行预排序(例如,由于先前的 map /归约工作)

减少联接。

当我们的文件尚未排序,并且太大而无法容纳在内存中时很有用。因此,您必须使用带有reducer的分布式排序来合并它们。

优点:适用于几乎无限的输入数据(不必容纳在内存中)。

缺点:需要减少阶段

分布式缓存。

当我们的输入词频文件未排序并且两个文件之一足够小以适合内存时,此命令很有用。在这种情况下,您可以将其用作分布式缓存,并将其作为哈希表Map 加载到内存中。然后,每个映射器都会将最大的输入文件作为键值对进行流传输,并从哈希映射表中查找较小文件的值。

优点:基于最大输入集大小的高效,线性复杂度。不需要 reducer 。

缺点:需要输入之一以适合内存。

关于hadoop - 在hadoop中加入vs分布式缓存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28117289/

10-12 17:32