HDFS块大小与实际文件大小相同

Pra*_*abu 15 filesize hdfs

我知道HDFS使用数据节点中的常规linux文件系统存储数据.我的HDFS块大小是128 MB.假设10 GB我的hadoop集群中有磁盘空间,这意味着HDFS最初具有80 blocks可用存储空间.

如果我创建一个小文件说12.8 MB,#available HDFS块将变为79.如果我创建另一个小文件12.8 MB会怎么样?#availbale区块会保持在79还是会降到78?在前一种情况下,HDFS基本上根据可用的可用磁盘空间重新计算每个块分配后的#available块,因此,只有在消耗了超过128 MB的磁盘空间后,#available块才会变为78.请澄清.

jfg*_*956 21

最好的方法就是尝试一下,看看我的结果如下.

但在尝试之前,我的猜测是,即使您只能在配置中分配80个完整块,也可以分配80个以上的非空文件.这是因为我认为每次分配非空文件时HDFS都不会使用完整的块.换句话说,HDFS块不是存储分配单元,而是复制单元.我认为HDFS的存储分配单元是底层文件系统的单元(如果使用块大小为4 KB的ext4,并且在复制因子为3的集群中创建1 KB文件,则消耗3倍4 KB = 12 KB的硬盘空间).

足够的猜测和思考,让我们试试吧.我的实验室配置如下:

  • hadoop版本1.0.4
  • 4个数据节点,每个带有一个小于5.0G的可用空间,ext4块大小为4K
  • 块大小为64 MB,默认复制为1

启动HDFS后,我有以下NameNode摘要:

  • 1个文件和目录,0个块= 1个总计
  • 使用的DFS:112 KB
  • DFS剩余:19.82 GB

然后我执行以下命令:

  • hadoop fs -mkdir /test
  • for f in $(seq 1 10); do hadoop fs -copyFromLocal ./1K_file /test/$f; done

有了这些结果:

  • 12个文件和目录,10个块=总共22个
  • 使用的DFS:122.15 KB
  • DFS剩余:19.82 GB

所以10个文件没有消耗10倍64 MB(没有修改"DFS剩余").