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

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

最佳答案

首先让我澄清一下您的评论。 Hadoop旨在支持跨大量潜在节点的潜在大规模并行计算,而不管数据来自何处。 Hadoop设计在需要时优先考虑可伸缩性而不是性能。确实,聪明地了解数据从何处开始以及如何分配数据可以对Hadoop工作的运行状况/迅速程度产生重大影响。

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

任何分布式平台都会遇到这个问题。例如,Storm让您说出哪个bolt实例将处理每个元组。术语可能有所不同,但是您将在Storm中实现与Hadoop大致相同的随机播放算法。

关于hadoop - 不存储输入数据时,Hadoop/MapReduce如何扩展?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16780181/

10-09 06:21
查看更多