Hadoop Map中的数据共享减少链接

时间:2012-10-31 09:23:18

标签: hadoop mapreduce

是否可以在连续的reducer和mapper之间共享一个值?

或者是否可以将第一个reducer的输出存储到内存中,第二个mapper可以从内存中访问它?

问题是, 我写了一个像Map1一样的链图缩减器 - > Reducer1 - > Map2 - > Reducer2。

Map1和Map2正在读取相同的输入文件。

Reduce1正在推导一个假设'X'作为其输出的值。

我需要'X'并输入Map2的文件。

如何在不读取Reduce1的输出文件的情况下完成此操作?

是否可以在内存中存储'X'来访问Mapper 2?

2 个答案:

答案 0 :(得分:4)

每个作业彼此独立,因此如果不将输出存储在中间位置,则无法跨作业共享数据。

仅供参考,在MapReduce模型中,地图任务不会相互通信。减少任务的情况也是如此。在Hadoop上运行的Apache Giraph使用同一作业中的映射器之间的通信进行迭代算法,这需要在映射器之间无需通信的情况下一次又一次地运行相同的作业。

不确定正在实施的算法以及MR的原因,但每个MR算法也可以在BSP中实现。这是一个paper比较BSP和MR。与MR相比,一些算法在BSP中表现良好。 Apache Hama是BSP模型的实现,Apache Hadoop是MR实现的方式。

答案 1 :(得分:1)

如果Reducer1生成的不同行数很少(比如你有10000(id,price)元组),则首选使用两阶段处理。您可以将第一个map / reduce中的结果加载到每个Map2映射器的内存中并过滤输入数据。因此,不会通过网络传输不需要的数据,所有数据都将在本地处理。使用combineres数据可以更少。

如果有大量不同的行,您需要两次读取数据。

相关问题