1. 硬件基础调优
2. JVM与GC调优
hbase-env.sh
,设置HBASE_HEAPSIZE
为物理内存的50%-70%(如8GB内存可设为export HBASE_HEAPSIZE=8G
),避免堆内存过大导致GC停顿时间过长。hbase-env.sh
中添加export HBASE_OPTS="$HBASE_OPTS -XX:+UseG1GC"
,平衡吞吐量与延迟。-XX:MaxGCPauseMillis=200
(目标最大GC停顿时间,单位毫秒)、-XX:InitiatingHeapOccupancyPercent=75
(触发GC的堆内存占用阈值),减少Full GC次数及停顿时间。3. RegionServer核心参数调优
hbase.regionserver.global.memstore.size
:控制所有Region的MemStore总大小占堆内存的比例,默认0.4(40%),可根据写入负载调整(如写入量大时可设为0.5,但需预留足够内存给BlockCache)。hbase.regionserver.global.memstore.lower.limit
:MemStore下限比例(默认0.38),当MemStore使用量达到此值时,会触发异步刷新。hbase.hregion.memstore.flush.size
:单个Region中MemStore的刷新阈值(默认128MB),建议设置为HDFS块大小(如128MB或256MB)的整数倍,避免小文件过多。hbase.regionserver.handler.count
:处理客户端请求的线程数,默认10。写入负载高时可调大(如100-200),读取负载高时可适当增加(如50-100),但需避免线程过多导致内存压力上升。hbase.regionserver.wal.codec
:使用org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec
(默认),提升WAL写入效率;hbase.wal.hsync
:设置为true
(默认),确保WAL数据持久化到磁盘,避免数据丢失。4. BlockCache与Compaction调优
hfile.block.cache.size
:控制BlockCache占堆内存的比例,默认0.2(20%)。读取负载高时可调大(如0.4-0.5),但需预留足够内存给MemStore(建议MemStore与BlockCache比例约为1:1至1:2)。hbase.hstore.compaction.min
:触发小Compaction的最小HFile数量,默认3,可适当增加(如5-10)以减少Compaction频率。hbase.hstore.compaction.max
:单次Compaction的最大HFile数量,默认10,可根据节点性能调整(如15-20)。hbase.hstore.blockingStoreFiles
:阻塞写入的HFile数量阈值,默认15,当HFile数量超过此值时,写入会被阻塞,需调大(如20-30)以避免写入停顿。5. 数据模型设计优化
hbase.hcolumn.max.versions
:设置列的最大版本数(默认1),根据业务需求调整(如历史数据查询需求大时可设为3-5);hbase.hcolumn.ttl
:设置数据生存时间(默认永久),避免无用数据占用存储空间。6. 预分区与批量操作
SPLIT
参数预先创建多个Region(如create 'table_name', 'cf', SPLITS => ['1000', '2000', '3000']
),避免后期数据增长导致Region倾斜,提升并行处理能力。BufferedMutator
进行批量Put/Delete操作,减少RPC调用次数;设置hbase.client.write.buffer
(默认2MB)增大写入缓冲区大小,提升批量写入效率。7. 监控与维护
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log
),分析GC频率与停顿时间,优化GC配置。major_compact
命令清理过期数据、合并小HFile;清理无用表、Region,释放存储空间。