2015-05-17 61 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 

這個命令將讓你怎麼知道文件的大小,塊數,複製塊,損壞塊,缺失塊。此外,它還會顯示每個塊的更多詳細信息,包括塊的存儲位置以及塊的健康狀況。