2015-05-17 98 views

回答

1

正如我们所知,文件的元数据存储在Namenode上,而实际数据存储在群集的Datanode上。

如果您已经移动了10 Gig文件,那么该文件的绝对元数据将存储在Namenode上,并且数据将存储在Datanodes上。但是,文件的大小远大于块大小(通常为64 MB或128 MB),那么该文件数据肯定会存储在群集的多个不同Datanodes块上(由于复制因素)。

只有Namenode具有群集中这些数据位置的知识。

1

无论何时将文件复制到HDFS,它都将分布在从节点中。根据文件的大小,它可能分布在几个或多个datanode上。你可以使用'fsck'命令检查你的文件的分布。使用以下命令检查文件分发参数。

$ hdfs fsck <absolute path to your file on hdfs> 
0

是的,copyFromLocal操作将在集群上分发输入数据的chuncks与复制副本一起。将内容写入HDFS的任何操作都将通过群集分配数据。

出于任何原因,Namenode服务将不会存储数据,因为只要准备好可用于在集群中存储给定输入数据的列表数据节点,只要任何客户端(包括hadoop -copyFromLocal)尝试写入数据。一旦客户端从namenode获得数据节点列表,则客户端负责将数据块与复制一起写入数据节点。

文件写入剖析 Hadoop权威指南第3章中的主题将帮助您清楚地理解上述场景。

好歹可以很好地检查/您的数据块被分配使用以下命令的群集在块,

hadoop fsck <hdfs_file_path> -files -blocks -locations 

这个命令将让你怎么知道文件的大小,块数,复制块,损坏块,缺失块。此外,它还会显示每个块的更多详细信息,包括块的存储位置以及块的健康状况。