HBase在CentOS上的读写性能优化策略
/etc/sysctl.conf,设置vm.swappiness=0,避免内存不足时数据交换到磁盘,影响性能。ulimit -n 65535,增加系统可打开的文件描述符数量,应对HBase大量文件操作。sysctl -w net.core.rmem_max=16777216和sysctl -w net.core.wmem_max=16777216增大TCP读写缓冲区,提升网络吞吐量。echo 3 > /proc/sys/net/ipv4/tcp_fastopen,减少TCP连接建立时间。-Xmx8G -Xms8G(避免过大导致Full GC频繁)。-XX:+UseG1GC -XX:MaxGCPauseMillis=200(目标最大GC停顿时间200ms)。hfile.block.cache.size(BlockCache,用于读取缓存)为堆内存的40%,hbase.regionserver.global.memstore.size(MemStore,用于写入缓存)为堆内存的20%-30%(读密集型业务可适当增大BlockCache比例)。hbase.client.autoFlush=false,开启客户端写缓冲区(默认2MB,可调整hbase.client.write.buffer至更大值,如64MB),批量提交数据,减少RPC调用次数。IndexedWALEditCodec(更高效的WAL编码器),设置hbase.regionserver.wal.codec=org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec,提升WAL写入性能。MD5(原始RowKey).substring(0,4))、哈希或反转时间戳(如Long.MAX_VALUE - timestamp + 原始RowKey)策略,使RowKey均匀分布在不同Region上。cf代替user_info),减少元数据存储和传输成本。hbase shell的pre-split命令或hbase-site.xml的hbase.hregion.max.filesize(设置Region最大文件大小,如10GB)预分区,避免后续数据倾斜导致单个Region过大,影响查询性能。get(List<Get> gets)接口,一次性获取多个行数据,减少客户端与RegionServer间的RPC连接数。BufferedMutator或put(List<Put> puts)接口,批量写入数据,降低网络I/O负担。Scan.setCaching(int caching)(如500-1000条),减少Scan操作的RPC交互次数(默认100条,适合大规模数据扫描)。Scan.addFamily(byte[] family)或Scan.addColumn(byte[] family, byte[] qualifier)明确指定所需列族或列,避免加载无关数据。hbase.hstore.compactionThreshold(触发Minor Compaction的最小HFile数量,如3)和hbase.hstore.compaction.max.size(单个HFile最大大小,如10GB),避免过多小文件影响读取性能。hbase.hregion.majorcompaction=0,手动触发Major Compaction(如凌晨低峰期),减少对线上业务的影响。hbase.hregion.max.filesize设置Region最大文件大小(如10-50GB),避免单个Region过大导致查询变慢。hbase-regionserver.log),分析Full GC、慢查询等问题,及时调整配置。