我将10Gig文件从本地文件系统复制到hdfs(使用-copyFromLocal),它是在所有数据节点之间分配还是只在namenode上?我如何确定它已在所有数据节点上分发?
答案 0 :(得分:1)
正如我们所知,文件的元数据存储在Namenode上,实际数据存储在集群的Datanode上。
如果您移动了10 Gig文件,那么此文件的元数据肯定会存储在Namenode上,数据将存储在Datanode上。但是文件的大小远大于块大小(通常为64 MB或128 MB),那么该文件数据肯定会存储在群集的不同Datanode(由于复制因子)的许多块上。
只有Namenode知道群集中的那些数据位置。
答案 1 :(得分:1)
每当将文件复制到HDFS时,它将在从属节点之间分发。根据文件的大小,它可能会分布在几个或多个数据节点上。您可以使用'fsck'命令检查文件的分布。使用以下命令检查文件分发参数。
$ hdfs fsck <absolute path to your file on hdfs>
答案 2 :(得分:0)
是的,copyFromLocal
操作将通过群集和复制副本分发输入数据的块。将内容写入HDFS的任何操作都将通过群集分发数据。
由于任何原因,Namenode服务不会存储数据,因为只要任何客户端(包括hadoop -copyFromLocal
)尝试写入数据,它就会准备可用于在群集中存储给定输入数据的列表数据节点。一旦客户端从namenode获取数据节点列表,客户端就会负责将数据块与复制一起写入数据节点。
Hadoop权威指南第3章中的文件写入剖析主题将帮助您清楚地了解上述情况。
无论如何,您可以使用以下命令检查数据的块/块如何在群集上分发,
hadoop fsck <hdfs_file_path> -files -blocks -locations
此命令将通知您文件大小,块数,复制块,损坏块,丢失块。此外,它将显示每个块的更多细节,包括存储块的位置和块的健康状态。