当没有存储输入数据时,Hadoop / MapReduce如何扩展?

时间:2013-05-27 20:30:53

标签: hadoop mapreduce distributed-computing

Hadoop的预期用途似乎是在输入数据为distributed(HDFS)时,并且在映射过程中已经存储在节点本地。

假设我们有不需要存储的数据;数据可以在运行时生成。例如,映射过程的输入是每个可能的IP地址。 Hadoop是否能够跨节点有效地分发Mapper工作?您是否需要明确定义如何将输入数据(即IP地址空间)拆分到不同的节点,或者Hadoop是否自动处理?

3 个答案:

答案 0 :(得分:4)

首先让我澄清你的评论。 Hadoop旨在支持跨潜在大量节点的潜在大规模并行计算,无论数据来自何处或从哪里来。 Hadoop设计在必要时支持可扩展性而非性能。确实,聪明的数据开始位置以及数据的分布方式可以对hadoop作业的运行速度/速度产生重大影响。

对于您的问题和示例,如果您将生成输入数据,您可以选择在第一个作业运行之前生成它,也可以在第一个映射器中生成它。如果您在映射器中生成它,那么您可以确定映射器正在运行的节点,然后仅生成将在该分区中减少的数据(使用分区器在映射器和缩减器之间引导数据)

这将是您在任何分布式平台上遇到的问题。例如,Storm让你有一些说法,其中bolt实例将处理每个元组。术语可能有所不同,但你将在Storm中实现与Hadoop大致相同的shuffle算法。

答案 1 :(得分:1)

您可能正在尝试在地图缩减群集上运行非MapReduce任务。 (例如IP扫描?)可能有更合适的工具,你知道...

很少有人没有意识到MapReduce是关于检查点的。它是为大型集群开发的,您可以在计算过程中遇到机器故障。通过在架构中内置检查点和恢复功能,可以减少故障和缓慢主机的后果。

这就是MapReduce中所有内容从磁盘到磁盘的原因。它之前是检查点,然后是检查点。如果它失败了,只有这部分工作重新运行。

通过省略检查点,您可以轻松胜过MapReduce。如果你有10个节点,你将轻松获胜。如果你有100个节点,你通常会获胜。如果你有一个主要的计算和1000个节点,很可能一个节点失败了,你希望你一直在做类似的检查点......

现在您的任务听起来不像MapReduce作业,因为输入数据是虚拟的。听起来好像你应该运行其他分布式计算工具;并且可能只是通过MapReduce将初始结果写入HDFS以便稍后处理。

但当然有办法解决这个问题。例如,您可以使用/ 16子网作为输入。每个映射器读取一个/ 16子网并完成它的工作。如果您意识到不需要生成所有2 ^ 32 IP,那么生成的假输入并不多,除非您的群集中有那么多节点...

答案 2 :(得分:1)

Mapper数量取决于InputFormat实现生成的Splits数量。 有NLineInputFormat,你可以配置它来生成与输入文件中的行一样多的拆分。您可以创建一个文件,其中每一行都是IP范围。我没有亲自使用它,有很多报道它没有按预期工作。 如果你真的需要它,你可以创建自己的InputFormat实现,为你的虚拟数据生成InputSplits,并根据需要强制使用多个映射器。