HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。
为何选择64MB(或128MB或256MB)为最优选择?
原因在于,减少硬盘寻道时间(disk seek time)。HDFS设计初衷支持大容量的流式数据操作,数据量通常较大。若数据块设置过少,读取数据块多,由于数据块在硬盘上非连续存储,普通硬盘移动磁头较慢,随机寻址速度降低,导致硬盘寻道时间增加,影响系统吞吐量。合适的块大小有助于减少寻道时间,提升系统效率。
为何不能小于64MB(或128MB或256MB)?
减少Namenode内存消耗是另一关键因素。HDFS仅具单个Namenode节点,内存有限。若数据块大小过小,Namenode需记录的数据块信息过多,可能导致内存资源耗尽。
为何不能远大于64MB(或128MB或256MB)?
主要考虑上层MapReduce框架的限制。过大块数据可能导致系统恢复时间延长,数据加载速度减慢。监管时间设定也需考虑数据块大小,过大的数据块难以准确估算预设时间间隔,影响节点状态判断,导致系统运行效率降低。数据量的增大直接影响问题解决的复杂度,增大时间复杂度。在Map Reduce框架中,数据排序是关键步骤,处理大文件排序效率直接影响系统性能。
综上所述,HDFS块大小的选择需综合考虑系统性能、内存消耗及上层框架限制,以达到最优的读写效率与系统稳定性。默认设置128MB为平衡不同需求的合理选择。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。