項目環境中遇到的小文件較多,起初除了NAMENODE的內存外,還是比較擔心文件物理空間的佔用。於是就看一下,小文件是如何佔用物理空間的:
前提:HDFS塊大小爲64MB
文件副本總共3份
1、 批量生成小文件(均20M)
2、 記錄測試前DFS空間使用情況
目前,DFS空間已經使用50.04GB
3、 向HIVE中LOAD一個文件testaa
4、 再次查看DFS空間使用情況
5、 查看文件testaa所在的塊佔用的空間情況
Total size可以看出:佔用物理空間爲20MB
6、 再次LOAD一個文件testab
7、 查看DFS空間使用情況
DFS空間使用50.16GB
8、 查看文件testab所在塊佔用空間情況
9、 批量加載小文件
10、執行該腳本
11、再次查看DFS空間使用情況
從以上測試得到:
DFS起始佔用空間大小:50.04GB
加載26個文件20MB後,DFS佔用空間大小:51.58GB
計算:
計算每個文件佔用的DFS空間大小:
(51.58GB-50.04GB)*1024/26=60.65MB
文件佔用物理空間大小:
20MB*3份=60MB
結論:
小於塊大小的小文件不會佔用整個HDFS塊空間。也就是說,較多的小文件會佔用更多的NAMENODE的內存(記錄了文件的位置等信息);再者,在文件處理時,可能會有較大的網絡開銷。