2013-04-09 61 views
2

我处理这类离奇的使用情况下,我需要确保文件是本地计算机A的,文件B是本地计算机B,等等。当将文件复制到HDFS,是有办法控制该文件将驻留在哪台机器上?我知道任何给定的文件将被复制到三台机器上,但我需要能够说“文件A将明确存在于机器A上”。我并不关心其他两台机器 - 它们可能是我集群上的任何机器。将文件复制到HDFS时,如何控制文件所在的节点?

谢谢。

+0

鉴于这种需求,有可能是您的HDFS整体架构是不正确的。请记住,*文件不会转到节点*,块会这样做。然而,你可以使用**机架识别**和**复制因子**(非常小)的群集。即确保每个块都去每台机器。无论如何,我没有看到很多优势,并且可能会更深入地展示您的用例,可能会让我们获得更好的见解来帮助您。 – xmar 2017-11-13 07:51:05

回答

0

我不这么认为,因为一般来说,当该文件是大于64MB(块大小)的文件块的初级副本将驻留在多个服务器上更大。

+0

块大小可以在配置设置中轻松修改,但这不是障碍。 [变更块大小(http://stackoverflow.com/questions/2669800/changing-the-block-size-of-a-dfs-file-in-hadoop) – Engineiro 2013-04-09 22:35:58

+0

此外,这些文件是小的,小于1MB – sangfroid 2013-04-09 23:15:42

+0

我的意思是在概念上,如果数据可以驻留在多个服务器上,那么不太可能不关心添加这样的选项。 – Sharvanath 2013-04-11 01:11:12

0

HDFS是一种分布式文件系统和HDFS集群是(一台机器或大量机器的)具体,一旦文件是在HDFS你下面松机或机器的概念。而这种抽象是最好的用例。如果文件大小较大,则复制块大小将文件剪切为块大小,并根据复制因子将这些块复制到群集中的其他计算机上。这些块基于

对于您的情况,如果您有3个节点群集(+1主名称节点),您的源文件大小为1 MB,复制大小为64 MB,复制因子为3,那么您将拥有3个节点的3个副本包含您的1MB文件,但从HDFS角度来看,您仍然只有1个文件。一旦文件复制到HDFS,你真的不考虑机器因素,因为在机器级别没有文件,它是文件块。

如果你真的想确保无论出于何种原因,你能做的就是设置复制因子1和1个有节点群集,这将保证您的离奇要求。

最后,你可以随时使用的FsImage观众工具Hadoop集群,看看那里的文件块的位置。更多细节位于here

相关问题