项目环境中遇到的小文件较多,起初除了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的内存(记录了文件的位置等信息);再者,在文件处理时,可能会有较大的网络开销。
本文出自 “一步.一步” 博客,请务必保留此出处http://snglw.blog.51cto.com/5832405/1643587
原文地址:http://snglw.blog.51cto.com/5832405/1643587