我正在处理一个奇怪的用例,我需要确保文件a是机器a的本地文件,文件B是机器B的本地文件,等等。当将文件复制到HDFS时,是否有一种方法可以控制该文件将驻留在哪些机器上?我知道任何给定的文件都将被复制到三台机器上,但我需要能够说"文件A肯定存在于机器A上"。我并不关心其他两台机器——它们可以是我集群中的任何一台机器。
谢谢。
我不这么认为,因为通常当文件大于64MB(块大小)时,文件块的主副本将驻留在多个服务器上。
HDFS是一个分布式文件系统,HDFS是特定于集群(一台机器或多台机器)的,一旦文件在HDFS,你就失去了机器或机器的概念。这种抽象使它成为最好的用例。如果文件大小大于复制块大小,文件将被分割成块大小,并基于复制因子,这些块将被复制到集群中的其他机器上。这些块基于
移动在您的情况下,如果您有3个节点集群(+1主namenode),您的源文件大小为1MB,您的复制大小为64MB,复制因子为3,那么您将在所有3个节点中拥有3个块副本,组成您的1MB文件,但是从HDFS的角度来看,您仍然只有1个文件。一旦文件复制到HDFS,你真的不需要考虑机器因素,因为在机器层面没有文件,只有文件块。
如果出于某种原因,您确实想要确保,您可以将复制因子设置为1,并拥有一个节点集群,这将保证您的奇怪需求。
最后,你可以在Hadoop集群中使用FSimage查看器工具来查看文件块的位置。更多细节在这里。
我最近发现了这个,它可以解决您正在寻找的问题:控制HDFS块放置