文章目录
一.HDFS文件块大小
1.概念
HDFS
中的文件在物理上是
分块存储(Block)
,块的大小可以通过配置参数(dfs.blocksize)来规定,默认在
Hadoop2.x/3.x
版本是
128M
,
1.x
版本是
64M
如果我们想查看这个参数,可以查阅
hdfs-default.xml
文件,找到其中的
dfs.blocksize
部分如下:
注:我们这里通过如下
shell
命令将该配置文件
下载
到了
本地
再进行了查看:
可以看到官方文档中说明,
默认块
大小
value
以
字节数
的大小存储,共134217728
bytes
,又因为
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
,那么一般的小文件可能都会被存储在同一个块中,显然
寻址时间减少
了很多,但是此时
传输时间>>寻址时间
,最终导致
处理数据
时非常
慢
!
Conclusion:HDFS块的大小设置主要取决于磁盘传输速率!!!
Conclusion:HDFS块的大小设置主要取决于磁盘传输速率!!!