hadoop通过copyFromLocal分发文件

时间:2015-05-17 11:25:24

标签: hadoop distributed

我将10Gig文件从本地文件系统复制到hdfs(使用-copyFromLocal),它是在所有数据节点之间分配还是只在namenode上?我如何确定它已在所有数据节点上分发?

3 个答案:

答案 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

此命令将通知您文件大小,块数,复制块,损坏块,丢失块。此外,它将显示每个块的更多细节,包括存储块的位置和块的健康状态。