hadoop mapreduce是否在每台机器上运行?

6ss1mwsb  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(387)

如果hadoop在50台机器的网格上运行,并且我运行一个任务来确定哪些是最常见的单词,我可以指定我只想在1.txt和2.txt文档中搜索吗?hadoop如何知道在哪台机器上查找这些文件,或者它将尝试在50台机器中的每台机器上查找这些文件?

ipakzgxi

ipakzgxi1#

是的,您应该指定hdfs中文件的路径作为mapreduce作业的输入。但好的是,你不需要知道这些文件实际上存储在哪里。
当你上传 1.txt 以及 2.txt 对于hdfs分布式文件系统,hadoop将这些文件中的数据块存储在称为节点(默认情况下为3)的集群中的多台计算机上。如果文件的大小大于一台机器可以存储的大小,hadoop会将文件分成几个块,并将每个块存储在几个节点上。
所以作业不需要知道文件实际存储在哪里。你的作业程序只需要通过uri来识别文件,就像 hdfs://1.txt 以及 hdfs://2.txt .
hadoop尽量在存储数据的同一节点上运行job(或job的一部分)。
当hadoop计划作业时,它会考虑哪些节点拥有作业的数据,以及此时哪个节点可用。然后它会安排作业在节点上运行。
如果每个文件适合一个节点,则作业将被安排在每个文件的一个节点上运行。所以它不会在集群的所有50个节点上运行。

6qfn3psc

6qfn3psc2#

在hadoop中,您将文件放在hdfs上,它将文件复制到多个位置,例如每个文件的3个副本,这些副本均匀分布。
例如,您有50个文件,每个文件在hdfs中有3个副本(这个数字是在设置hadoop时确定的)。说吧 Machine11.txt, 24.txt and 47.txt m2有 11.txt, 24.txt and 27.txt 其他人也一样。
当您输入_i.txt(i是1到50)时 24.txt hadoop将把这个任务交给m1或m2或者其他拥有这个文件的机器,以便不进行任何网络数据传输。所有其他文件都将由拥有该文件的机器进行处理(在某些例外情况下,这些规则可能会失败)。为了更好地理解这个wiki页面。

相关问题