CentOS环境下HBase性能调优策略
vm.swappiness=0),避免内存数据交换到磁盘导致性能骤降;ulimit -n 65535)和TCP缓冲区大小(net.core.rmem_max=16777216、net.core.wmem_max=16777216),提升系统并发处理能力;echo 3 > /proc/sys/net/ipv4/tcp_fastopen),减少连接建立延迟;HBASE_HEAPSIZE(如export HBASE_HEAPSIZE=16G)和HBASE_OFFHEAPSIZE(可选,用于堆外缓存)。hbase.regionserver.global.memstore.size=0.5),读密集型场景提高BlockCache比例(如hfile.block.cache.size=0.6)。-XX:+UseG1GC -XX:MaxGCPauseMillis=150 -XX:InitiatingHeapOccupancyPercent=35),减少Full GC导致的STW(Stop-The-World)暂停。hbase.client.write.buffer,默认2MB,可调整为64MB-256MB),减少网络传输次数;put(List<Put>)批量接口,将多行数据合并写入,降低RPC开销;hbase.regionserver.hlog.blocksize,默认128MB)或延长日志滚动周期(hbase.regionserver.logroll.period,默认1小时),减少WAL写入频率;hbase.hregion.memstore.flush.size,默认128MB,可调整为256MB),减少Compaction次数。hfile.block.cache.size,读多写少场景可设为0.6),缓存热点数据;启用堆外缓存(hbase.bucketcache.ioengine=offheap、hbase.bucketcache.size=8192),减少GC对缓存的影响;dfs.client.read.shortcircuit=true),允许客户端直接读取DataNode上的数据,减少数据传输路径;hbase.hregion.compress=snappy),平衡存储空间与读取性能;调整HFile块大小(hfile.block.size,默认64KB,写入多可设为128KB-256KB,读取多可设为64KB)。MD5(原始RowKey).substring(0,8))或反转时间戳(如Long.MAX_VALUE - timestamp),使数据均匀分布在不同Region,防止热点;hbase.hcolumn.max.versions,如3-5),避免存储过多历史版本;对临时数据设置TTL(hbase.hcolumn.ttl,如7天),自动清理过期数据,减少存储压力。preSplit方法预先划分Region(如createTable(TableName.valueOf("mytable"), Bytes.toBytes("cf"), new byte[][]{Bytes.toBytes("row0000"), Bytes.toBytes("row1000")})),使数据均匀分布,避免后期数据倾斜导致的Region热点;hbase.hregion.bloom.block.enabled=true),快速判断某行或某列是否存在,减少不必要的磁盘I/O,提高查询性能。hbase.hstore.compaction.min(默认3,可调整为5-10)和hbase.hstore.compaction.max(默认10,可调整为20),避免频繁合并;hbase.hregion.majorcompaction=0禁用自动Major Compaction;若必须执行,结合hbase.offpeak.end.hour和hbase.offpeak.start.hour(如22:00-06:00)在业务低峰期执行,减少对读写的影响。hbase.client.scanner.caching,默认100,可调整为500-1000),使客户端一次获取更多数据,减少RPC次数;但需避免设置过大导致客户端内存溢出;get(List<Get>)批量接口,替代多次单行get操作,降低网络通信开销;family:qualifier(如scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"))),避免返回多余数据,减少数据处理时间;hbase.client.cache.blocks=false,禁用客户端缓存,避免缓存占用内存且影响读取逻辑。balancer命令(hbase balancer)定期调整Region分布,确保数据均匀分布在各个RegionServer,避免单点过载;