硬件资源优化
ping、iperf等工具检测网络性能,避免网络成为瓶颈。操作系统调优
vm.swappiness=0(CentOS 7及以上)关闭交换分区,强制系统优先使用物理内存。blockdev --setra 32768 /dev/sda,将预读扇区数设为32768),提高顺序读取性能;增加文件描述符限制(ulimit -n 65535),避免大量连接导致文件句柄耗尽。vm.vfs_cache_pressure(建议设为100-200),加快系统回收未使用内存的速度;设置vm.min_free_kbytes(如物理内存的1%),确保系统有足够空闲内存应对突发请求。HBase配置参数调整
hbase.regionserver.global.memstore.size(建议设为堆内存的30%-40%)控制MemStore大小,避免内存溢出;启用OffHeap缓存(hbase.offheapcache.percentage,建议设为20%-30%),减少JVM垃圾回收(GC)对性能的影响。numRegions参数指定初始Region数量),避免后期数据倾斜导致热点问题;增加hbase.regionserver.handler.count(建议设为CPU核心数的2-3倍),提高RegionServer处理RPC请求的能力。hbase.hregion.memstore.size(建议设为堆内存的10%-20%),平衡写入性能与内存占用;启用异步WAL(hbase.regionserver.asyncwal.enabled=true),减少写操作的延迟;使用高效WAL编码器(如org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec),提高WAL写入效率。TieredCompactionPolicy适合读多写少场景,DateTieredCompactionPolicy适合时间序列数据),并通过hbase.hstore.compactionRatio(建议设为1.2-1.5)、hbase.hstore.compactionThreshold(建议设为3-5)调整Compaction触发条件,减少Compaction对读写性能的影响。数据模型设计优化
hbase.hcolumn.max.versions(建议设为1-3)限制列的最大版本数,减少历史数据占用存储空间;使用hbase.hcolumn.ttl(如7天)设置数据生命周期,自动清理过期数据,降低存储压力。缓存与索引优化
hfile.block.cache.size参数设置。hbase.hregion.bloom.block.enabled=true),减少不必要的磁盘I/O。布隆过滤器可快速判断某行数据是否存在于HFile中,避免读取不存在的数据。客户端优化
Scan.setCaching()参数值(如从默认100增加到500-1000),减少客户端与RegionServer间的RPC调用次数,提高扫描效率。Table.get(List<Get>))和批量Put(Table.put(List<Put>))接口,减少网络I/O开销。批量操作可将多个请求合并为一个,降低RPC延迟。Scan.addFamily())或列(Scan.addColumn()),避免加载多余数据,提高查询速度。监控与维护
hbase-regionserver.log),查找慢查询、GC频繁等问题。可通过grep、awk等工具提取关键信息(如慢查询的RowKey、GC耗时)。hbase shell compact '表名')和Split(hbase shell split 'Region名')操作,清理无用HFile文件,优化存储结构;备份重要数据,防止数据丢失。