文章目录
一.HDFS文件块大小
1.概念
HDFS
中的文件在物理上是分块存储(Block)
,块的大小可以通过配置参数(dfs.blocksize)来规定,默认在Hadoop2.x/3.x
版本是128M
,1.x
版本是64M
如果我们想查看这个参数,可以查阅hdfs-default.xml
文件,找到其中的dfs.blocksize
部分如下:
注:我们这里通过如下
shell
命令将该配置文件下载
到了本地
再进行了查看:
可以看到官方文档中说明,默认块
大小value
以字节数
的大小存储,共134217728bytes
,又因为1MB=1024KB=1024^2Bytes
,经过转换得到恰好为128MB
。(自用版本为Hadoop3.x系列)
2.寻址时间和传输时间
寻址时间
:在集群中查找到所需要的块block-i
所需要的时间.
传输时间
:对找到的块block-i
进行上传/下载
等操作进行传输所需要的时间.
注:一般,当
寻址时间
为传输时间
的1%
时,为最佳状态
(专家)。比如,当遍历集群中的block块,直到找到我们想要的block,花费的寻址时间为10ms,那么此时传输时间=10ms/0.0.1=1000ms=1s。这个时候为最佳状态。
3.文件块大小与什么有关系(重点)?
目前磁盘的的传输速率普遍为100MB/s
,由于块大小=磁盘传输速率*传输时间
,所以块大小
由磁盘传输的速率快慢
决定,某些公司使用的硬盘好,传输速率高,比如200MB/s~300MB/s,
那么计算得到块大小在200M~300M
,此时便可以设置为256M
.(计算机中100
不是整数,计算机中的进制单元
是1024
)
思考:为什么块的大小不能设置太小,也不能设置太大?
(1)HDFS的块设置太小
,会增加寻址时间
,程序一直在寻找块的开始位置;
假设有一个文件大小
100KB,我们此时把块大小
设置为1KB,那么单这一个文件就需要被分为100个块
,那么如果后续要查找该文件的话,由于要找该文件对应的100个块,这将会大幅增加寻址时间
。
(2)如果块设置太大
,从磁盘传输数据的时间
会明显大于定位这个块开始位置所需的时间
,导致程序在处理这块数据时,会非常慢。
反之,如果块过大
,比如定义1T
,那么一般的小文件可能都会被存储在同一个块中,显然寻址时间减少
了很多,但是此时传输时间>>寻址时间
,最终导致处理数据
时非常慢
!