数据块是HDFS的核心存储单元,其大小直接影响元数据负载与读写效率。默认128MB的块大小适用于多数流式处理场景,但需根据数据特征调整:
HDFS默认采用3副本机制保证数据可靠性,但可根据数据生命周期与访问频率动态调整,平衡可靠性与存储成本:
dfs.replication调整副本数,通过HDFS的存储策略(如HOT、COLD)控制数据存放规则。压缩可显著减少存储空间占用与网络传输时间,需根据业务场景选择压缩算法:
SET hive.exec.compress.output=true; SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;),或在HDFS中全局配置压缩编解码器(io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec)。机架感知策略可优化数据块的分布,提高网络传输效率:
topology.script.file.name指定机架拓扑脚本(如Python脚本),将节点划分到不同机架(如/rack1/node1、/rack2/node2),使副本分布在不同机架(第一副本在客户端所在机架,第二副本在不同机架,第三副本在第二副本所在机架的另一节点),减少跨机架网络传输;dfs.disk.balancer.enabled=true),设置平衡阈值(如10%),当节点存储利用率偏差超过阈值时自动触发数据迁移,避免磁盘空间不均衡。缓存可减少对DataNode的磁盘访问,提高读取性能:
dfs.client.read.shortcircuit=true),允许客户端直接从本地DataNode读取数据,减少网络拷贝(需配置dfs.domain.socket.path指定域套接字路径,如/var/lib/hadoop-hdfs/dn_socket);dfs.namenode.accesstime.precision设置访问时间精度(如1小时),提前将热点数据加载到缓存;hadoop cacheadmin命令创建缓存池(如hadoop cacheadmin -addPool cachePool1 -mode 0777 -limit 100G),并将重要数据缓存到池中(如hadoop cacheadmin -cache /user/data/cache -pool cachePool1);dfs.client.read.shortcircuit.streams.cache.size=1000),提高连续读取的效率(如某媒体公司通过缓存优化,热点数据访问延迟从18ms降至6ms)。硬件性能与集群规模直接影响存储效率:
ns1、ns2),每个命名空间有自己的块池与DataNode,解决单NameNode的性能瓶颈(如某大型互联网公司通过Federation支持PB级数据存储)。持续监控集群状态是优化存储效率的关键:
dfs.namenode.handler.count、调整DataNode的传输带宽dfs.datanode.balance.bandwidthPerSec),优化集群性能。