Hadoop MapReduce是否可以在每台机器上运行?

时间:2013-05-26 19:27:47

标签: hadoop mapreduce

如果我在50台计算机的网格上运行Hadoop,并且我运行确定哪些是最常用的单词,我可以指定我只想搜索文档abc1.txt和abc2.txt吗? Hadoop如何知道在哪台机器上查找这些文件,或者它是否会尝试在50台机器上找到这些文件?

2 个答案:

答案 0 :(得分:1)

在hadoop中,您将文件放在hdfs上,并将文件复制到多个位置,比如每个文件的3份副本均匀分布。

例如,您有50个文件,每个文件在hdfs中有3个副本(此数字是在设置hadoop时确定的)。假设Machine1abc1.txt, abc24.txt and abc47.txt而M2有abc11.txt, abc24.txt and abc27.txt,其他人也有类似情况。

当你给出abc_ i .txt(i是1到50)作为输入时,abc24.txt hadoop会将作业交给M1或M2或其他机器有文件,以便没有任何网络数据传输。并且所有其他文件将由具有该文件的机器处理(可能存在这些规则失败的一些特殊情况)。为了更好地理解,请阅读此wiki page

答案 1 :(得分:1)

是的,你应该指定HDFS中文件的路径作为MapReduce作业的输入。但好处是 - 您不需要知道这些文件的存储位置。

当您将abc1.txtabc2.txt上传到HDFS - 分布式文件系统时,Hadoop会将这些文件中的数据块存储在称为节点的群集中的多台计算机上(默认情况下为3)。如果一台机器可以存储的文件大小更大--Hadoop会将文件分成几个块,并将每个块存储在几个节点上。

因此,作业不需要知道文件的实际存储位置。您的工作计划只会通过URI hdfs://abc1.txthdfs://abc2.txt识别文件。

Hadoop尽力在存储数据的同一节点上运行作业(或部分作业)。

当Hadoop计划您的工作时,它将考虑哪些节点具有该作业的数据以及当时可用的节点。然后它将安排作业在节点上运行。

如果每个文件适合一个节点,则该作业将被安排在每个文件的一个节点上运行。所以它不会在集群的所有50个节点上运行。