项目环境中遇到的小文件较多,起初除了NAMENODE的内存外,还是比较担心文件物理空间的占用。于是就看一下,小文件是如何占用物理空间的:


前提HDFS块大小为64MB

      文件副本总共3


1、  批量生成小文件(均20M

wKioL1VKBPPRLhwyAANmM4NvOaw676.jpg


2、  记录测试前DFS空间使用情况

wKiom1VKA63SxRdVAAE9MYR7Yhw541.jpg

目前,DFS空间已经使用50.04GB


3、  HIVELOAD一个文件testaa

wKiom1VKBB7AyD_XAAFQxNFcLF4082.jpg


4、  再次查看DFS空间使用情况

wKioL1VKBcLxHo8tAAE-TWWIfpo156.jpg


5、 查看文件testaa所在的块占用的空间情况

wKiom1VKBH7iuw7YAASlmTOZZSI376.jpg

Total size可以看出:占用物理空间为20MB


6、 再次LOAD一个文件testab

wKioL1VKBiLzLUL3AAFB6FiBn5U861.jpg

7、 查看DFS空间使用情况

wKioL1VKBkPAPbqUAAE6tWRiq08927.jpg

DFS空间使用50.16GB


8、  查看文件testab所在块占用空间情况

wKioL1VKBnKQyWZtAASoCzs43gI942.jpgTestab占用物理空间也为20MB


9、  批量加载小文件

wKiom1VKBTqTMYnyAAWXs9VopVI694.jpg


10、执行该脚本

wKioL1VKBuCQIPGPAAcSIpNtp0g894.jpg

wKiom1VKBYPRI8hvAAFIGcFbiOk521.jpg


11、再次查看DFS空间使用情况

wKioL1VKBxyxmfJbAAEoMKjghvU436.jpg



从以上测试得到:

    DFS起始占用空间大小:50.04GB

       加载26个文件20MB后,DFS占用空间大小:51.58GB

计算:

       计算每个文件占用的DFS空间大小:

          51.58GB-50.04GB*1024/26=60.65MB

       文件占用物理空间大小:

           20MB*3=60MB

结论:

    小于块大小的小文件不会占用整个HDFS块空间。也就是说,较多的小文件会占用更多的NAMENODE的内存(记录了文件的位置等信息);再者,在文件处理时,可能会有较大的网络开销。