Hadoop中HDFS上的文件是分块存储的,在hadoop1.x的版本,分块大小(block_size)默认是64M,Hadoop2.x的版本中,分块大小默认是128M。
为什么要这么设计?
1)首先NameNode会根据元数据信息进行寻址。假如寻址时间是10ms。
2)寻址时间是数据传输时间的0.01倍时,是最佳状态。所以最佳数据传输时间=10ms / 0.01 = 1000ms = 1s。
3)目前大多磁盘的传输效率为100M/s(和磁盘性能有关)。
4)又因为计算机底层都是二进制存储,取一个2的n次方距离100最近的数,最终取2的7次方,也就是128。
如何自定义block_size?
在hdfs-site.xml配置文件中,加入配置项:
<property>
<name>dfs.blocksize</name>
<value>256m</value>
</property>