如何避免在链式hadoop中不必要地重复映射步骤

时间:2016-09-06 16:37:47

标签: hadoop hadoop-streaming

我有两个链式mapreduce步骤(在更大的分支工作流程内)。第一组由id和极少数情况下产生一个具有不同id的新对象(可能是数亿个输入对象中的几千个)。第二个再次按ID分组所有内容,包括新对象,并产生一堆我关心的东西。

当除了新对象之外的所有内容已经在分组相同的服务器上并按id排序时,再次读取/随机播放所有数据似乎真的很浪费。有没有办法将新东西改组为当前的减速器并让它们再次启动列表?

我正在使用Hadoop流媒体,因此任何与之相关的答案都是理想的,但我也对一般答案感兴趣。

1 个答案:

答案 0 :(得分:0)

如果新对象是由reducers生成的,那么你不能一次性使用MapReduce。考虑使用spark;迭代任务更好。

如果新对象是由映射器生成的,并且第一级缩减器只是传递,您应该能够一步完成:第一阶段的映射器应该同时发出原始记录和新记录(这里是没有规则说映射器必须是1:1。映射器可以产生比输入更多或更少的记录。