hadoop - 通过Reducer Hadoop中的值进行两次迭代

标签 hadoop mapreduce

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

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

如果您需要迭代两次,但又没有足够的值(value)将值缓存在内存中怎么办?

有某种解决方法吗?

也许对此问题有一些答案,但是我是Hadoop的新手,所以我希望自提出问题以来就找到了一些解决方案。

具体来说,这是我需要做的:

  • Reducer获得一定数量的点(例如-具有x,y,z坐标的3D空间中的点)
  • 应该在它们之间选择一个随机点-我们首先将其称为PointPoint
  • 然后,
  • Reducer应该找到距离firstPoint最远的点,以实现它需要遍历所有值的方式-这样我们就可以得到secondPoint
  • 之后,reducer应该找到距离secondPoint最远的点,因此需要再次遍历数据集-这样我们就可以得到thirdPoint
  • 从thirdPoint到所有其他点的距离需要计算

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

    缓冲此距离并不是问题,因为每个距离都是两倍,而一个点实际上可能是n维空间中的一个点,因此每个点可能具有n个坐标,因此可能会占用太多空间。

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

    最佳答案

    它可能无法在每种情况下都起作用,但是您可以尝试运行更多的reducer,以便每个都处理少量的数据,然后可以将这些值缓存到内存中。

    关于hadoop - 通过Reducer Hadoop中的值进行两次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29268198/

    相关文章:

    unit-testing - 如何对 Hadoop Writable 进行单元测试

    hadoop - HappyBase - 是否有 find_one 或 scan_one 的等价物?

    java - 如何将数组中的字符串附加到 mapreduce 中的 Text()

    hadoop - 澄清hadoop中的Map任务和reduce任务?

    hadoop - 在 Hive 中,简单 UDAF 和通用 UDAF 有什么区别?

    java - Hadoop副本处理

    hadoop - Windows 上的 HIVE 安装

    java - Hadoop MapReduce - 如何提高并行性

    hadoop - 如何在 MapReduce 引擎中制作自定义计数器?

    具有多个参数的 CouchDB 中的 Map/Reduce?