Hadoop:在同一数据或ChainMap上运行两个M / R作业,同步障碍

时间:2013-04-25 23:17:14

标签: hadoop mapreduce

我有一个问题,需要我在迭代过程中过滤大量数据,数十TB。由于尺寸的原因,我想在2个连续的地图阶段进行计算,这样就不需要在网络上重新传输数据了。

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

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

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

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

我确信有些东西我不见了,但我真的可以使用一些帮助!

由于

1 个答案:

答案 0 :(得分:1)

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

由于您需要完成阶段1,因此在对阶段2执行任何其他操作之前,您确实需要完成映射阶段。在Mapper的{​​{1}}阶段2中执行阶段1。这是最简单的。

奇怪的是,拥有两个Map / Reduces可能会更快,但没有ReducerReducer可以是无操作,Reducer。致电Reducer.class。你可以通过这种方式避免洗牌阶段。它不会将数据复制到Reducer,而只是转储到HDFS。

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

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