HBase在CentOS上的存储优化技巧
vm.swappiness=0
,避免内存溢出时数据写入磁盘影响性能)、调整文件系统预读缓存(blockdev --setra 32768 /dev/sda
,提升读取效率)、限制进程睡眠(避免后台进程抢占资源)、开启NTP时间同步(确保集群节点时间一致);ulimit -u
)和打开文件数(ulimit -n
,建议设置为65535及以上),防止HBase因资源限制无法正常运行。gethexsplits
等方法预先分割Region(如根据数据量估算Region数量),避免后期数据集中导致的热点问题,提升写入和查询负载均衡性;hbase.hcolumn.max.versions
限制列的最大版本数(如保留最近3个版本),使用TTL
(Time To Live)设置数据生命周期(如7天后自动删除),减少无用数据存储。hbase.regionserver.global.memstore.size
),避免内存溢出;增大BlockCache占比(如堆内存的40%,hfile.block.cache.size
),提升读取性能;调整处理RPC请求的线程数(hbase.regionserver.handler.count
,建议设置为CPU核心数的2-4倍),提高并发处理能力;hbase.client.autoFlush=false
),增大客户端写缓冲区(hbase.client.write.buffer
,如设置为128MB及以上),启用批量写入(put(List<Put>)
),减少网络I/O和磁盘写入次数;hbase.hregion.compress
),选择适合业务场景的算法(Snappy兼顾压缩率与速度,LZ4压缩率更高但CPU消耗略大),减少存储空间占用和网络传输开销;hbase.hstore.compaction.min
设置为3-5),避免频繁的小文件合并影响性能;hfile.block.size
),读取密集型业务(如随机查询)选择较大块(减少磁盘寻址次数),写入密集型业务选择较小块(减少写入放大)。hbase.regionserver.memstore.mslab.enabled=true
开启MemStore-Local Allocation Buffer,减少内存碎片化,降低Full GC发生频率,提升内存使用效率;hbase.hregion.bloom.block.enabled=true
),过滤掉不包含目标数据的HFile,减少不必要的磁盘扫描,提升读取性能(尤其适用于点查场景);scan.setCaching(500)
或更高),减少客户端与RegionServer之间的RPC调用次数,提升查询效率;hbase snapshot create
)定期备份重要数据,将冷数据导出到新集群(如HDFS或对象存储),实现数据归档和成本优化;hbase-regionserver.log
),分析慢查询、GC异常等问题,针对性调整配置(如增大JVM堆大小、优化GC策略);