【问题标题】:Join vs COGROUP in PIG在 PIG 中加入 vs COGROUP
【发布时间】:2011-11-21 16:49:16
【问题描述】:

当我在猪中使用 COGROUP 而不是 JOIN 时,是否有任何优势(性能/地图数量减少)?

http://developer.yahoo.com/hadoop/tutorial/module6.html 谈论他们产生的输出类型的差异。但是,忽略“输出模式”,性能是否有显着差异?

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    没有重大的性能差异。我这么说的原因是它们最终都是一个 MapReduce 作业,将相同的数据转发给减速器。两者都需要将所有记录向前发送,其中键是外键。如果有的话,COGROUP 可能会更快一些,因为它不会对匹配项进行笛卡尔积并将它们保存在单独的包中。

    如果您的数据集很小,您可以使用名为"replicated join" 的连接选项。这将在所有地图任务中分配第二个数据集并将其加载到主内存中。这样,它可以在映射器中完成整个连接,而不需要减速器。根据我的经验,这是非常值得的,因为 join 和 cogroups 的瓶颈是将整个数据集改组到 reducer。据我所知,COGROUP 无法做到这一点。

    【讨论】:

    • 在内部,join 和 cogroup 在 Pig 中是一样的(并且在 join 中没有笛卡尔连接,不确定你的意思)。只有最终结果的格式会根据您使用的关键字而变化。尝试对连接的结果进行“描述”——您将在解释计划中看到 COGROUP 运算符。
    • 我所说的笛卡尔积的意思是,如果外键上有多个匹配项,您将获得更多记录。例如,如果第一个数据集中有 3 个“abcde”,然后在第二个数据集中有 4 个“abcde”,它会输出 12 个记录,因为它匹配每个记录。同时,在 COGROUP 中,它将关系分开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多