在PIG加入vs COGROUP

raj*_*raj 12 hadoop apache-pig

当我在猪中使用COGROUP代替JOIN时,是否有任何优势(wrt性能/没有地图减少)?

http://developer.yahoo.com/hadoop/tutorial/module6.html讨论了它们产生的输出类型的差异.但是,忽略"输出模式",性能是否存在显着差异?

Don*_*ner 13

没有重大的性能差异.我说这个的原因是它们最终都是一个MapReduce作业,它将相同的数据发送到Reducer.两者都需要向前发送所有记录,密钥是外键.如果COGROUP可能的话,可能会更快一些,因为它不会在击中时使用笛卡尔积,并将它们保存在单独的袋子中.

如果您的某个数据集很小,则可以使用名为"复制连接"的连接选项.这将在所有map任务中分配第二个数据集并将其加载到主内存中.这样,它可以在映射器中完成整个连接,而不需要reducer.根据我的经验,这是非常值得的,因为连接和cogroups的瓶颈是将整个数据集拖放到reducer.据COGROUP我所知,你不能这样做.

  • 我所说的笛卡尔积的意思是,如果外键有多个匹配项,您将获得更多记录。例如,如果第一个数据集中有 3x 个“abcde”,然后第二个数据集中有 4x 个“abcde”,它会输出 12x 条记录,因为它匹配每个记录。同时,在 COGROUP 中,它保持关系分离。 (2认同)