通过Reducer Hadoop中的值迭代两次

时间:2015-03-25 23:07:13

标签: hadoop mapreduce

我在几个地方读到,在Reducer中迭代两次值的唯一方法是缓存这些值。

但是,在这种情况下,所有值都必须适合主存储器。

如果你需要迭代两次,但是你没有把这些值缓存在内存中,那该怎么办?

有某种解决方法吗?

也许有一些关于这个问题的答案,但我是Hadoop的新手,所以我自从问到问题以来找到了一些解决方案。


更具体地说,我的问题是,我需要做的是:

  • Reducer获取一定数量的点(每个示例 - 带有x,y,z坐标的3D空间中的点)
  • 应该选择它们之间的一个随机点 - 让我们称之为firstPoint
  • 然后Reducer应该找到距离firstPoint最远的点,为此需要迭代所有值 - 这样我们得到secondPoint
  • 之后,reducer应该找到离secondPoint最远的点,因此需要再次遍历数据集 - 这样我们得到第三个点
  • 需要计算从第三点到所有其他点的距离

需要保存从secondPoint到所有其他点的距离以及从thirdPoint到所有其他点的距离,因此可以执行其他步骤。

缓冲这个距离不是问题,因为每个距离都是一个双倍,而一个点实际上可以是n维空间中的一个点,所以每个点都可以有n个坐标,所以它也可以占用很大的空间。

我最初的问题是如何迭代两次,但我的问题更为笼统,如何通过值迭代多次,以执行上述步骤?

1 个答案:

答案 0 :(得分:0)

它可能不适用于所有情况,但您可以尝试运行更多的reducer,以便每个处理足够少的数据,然后您可以将值缓存到内存中。