一、硬件与系统基础优化
echo never > /sys/kernel/mm/transparent_hugepage/enabled和echo never > /sys/kernel/mm/transparent_hugepage/defrag,并在/etc/rc.local中添加上述命令(重启后生效);调整vm.swappiness=0(仅适用于内存充足场景),减少系统使用交换分区;优化挂载选项,在/etc/fstab中对HBase数据目录挂载项添加noatime(减少磁盘I/O);修改/etc/security/limits.conf,增加文件描述符限制(* soft nofile 65536; * hard nofile 65536)。二、HBase配置参数优化
hbase.regionserver.heapsize,如8GB);优化MemStore与BlockCache比例(hbase.regionserver.global.memstore.upperLimit设为0.45,避免频繁flush;hbase.regionserver.blockcache.size读多写少场景设为0.6-0.8,写多读少设为0.3-0.5)。hbase.hregion.max.filesize,建议5-20GB,平衡负载均衡与管理开销);调整HFile Block Size(hbase.hfile.block.size,随机读多建议64KB,顺序读多建议128KB)。hbase.regionserver.wal.async.sync=true),减少写延迟;启用WAL压缩(hbase.regionserver.wal.enablecompression=true,推荐使用Snappy算法,平衡压缩率与速度)。hbase.regionserver.handler.count,默认30,建议80-128,应对高并发请求)。三、数据模型设计优化
cf),避免特殊字符增加解析开销。NUMREGIONS和SPLITALGO参数,如create 'my_table', 'cf', {NUMREGIONS => 10, SPLITALGO => 'HexStringSplit'}),避免数据集中写入单个Region。四、客户端调优
hbase.client.write.buffer(默认2M,推荐6M,减少RPC次数;需平衡客户端内存占用与服务端压力)。hbase.client.scanner.caching(默认1,建议500-1000,减少客户端与RegionServer交互;若数据量大,可适当减小避免内存溢出);全表扫描或定期任务时,设置scan.setCacheBlocks(false)(避免无用缓存)。scan.addFamily()或scan.addColumn()),减少不必要的数据检索;使用KeyOnlyFilter(若只需RowKey,可大量减少网络消耗);关闭Scanner(使用完毕后调用scanner.close(),避免内存浪费)。五、压缩与编码优化
alter 'my_table', {NAME => 'cf', COMPRESSION => 'SNAPPY'}命令设置。alter 'my_table', {NAME => 'cf', DATA_BLOCK_ENCODING => 'FAST_DIFF'}。六、JVM与GC调优
LRUBlockCache + MemStore < 80% * JVM_HEAP(默认阈值),建议调整为70%-75%(如堆内存40G,LRU+MemStore设为28-30G)。hbase-env.sh添加export HBASE_OPTS="$HBASE_OPTS -XX:+UseG1GC";调整GC参数(如-XX:MaxGCPauseMillis=200,目标最大GC停顿时间,单位毫秒)。七、监控与维护
major_compact合并小文件(减少StoreFile数量);清理无用数据(如HDFS回收站中的旧文件)。