Hadoop:在相同的数据或ChainMap上运行两个M/R作业,并设置同步障碍



我有一个问题,需要我在迭代过程中过滤大量数据,数十tb。由于大小,我想在两个连续的map阶段进行计算,这样数据就不需要在网络上重新传输。

所以算法的步骤是1)分析所有数据并做出决定,2)在相同的数据上重新运行,并根据1的决定进行过滤过程。

我认为有两种方法可以解决这个问题,但似乎每一种都有很大的问题。

1)解,ChainMapper。问题:第一个映射器需要在第二个开始之前完全完成。

2)解决方案,两个工作。问题:当数据在作业之间被删除时,数据会通过网络重新传输。

我肯定我错过了什么,但我真的需要一些帮助!

谢谢

鉴于您的澄清:您不能使用ChainMapper,但它正是,因为它不通过将映射器1应用于所有键,等待,然后应用映射器2来操作。它将映射链应用于每个输入键。有些人甚至会在其他人开始之前完成第一阶段和第二阶段。但你是对的,它不会导致更多的数据通过网络;这里甚至没有写入磁盘!

由于您需要完成阶段1,因此您确实需要在对阶段2进行任何其他操作之前完成Map阶段。在Mapper中进行阶段1,在Reducer中进行阶段2。这是简单的。

奇怪的是,有两个Map/reduce可能会更快,但没有ReducerReducer可以是无操作的Reducer.class。呼叫setNumReduceTasks(0)。这样可以避免洗牌阶段。它不会将数据复制到reducer,而是直接转储到HDFS。

通常,您的下一个映射器将在HDFS数据之上生成。没有额外的转移。

我不认为你会在这里避免一些数据传输来重组和重新整理数据,但我认为它不太可能主导你的计算。

相关内容

  • 没有找到相关文章

最新更新