/etc/sysctl.conf,调整以下关键参数以提升IO和网络性能:fs.file-max = 1000000 # 增加文件描述符限制 vm.swappiness = 10 # 减少内存交换(避免频繁IO) net.core.rmem_max = 16777216 # 增大TCP接收缓冲区 net.core.wmem_max = 16777216 # 增大TCP发送缓冲区 执行sysctl -p使配置生效。noatime(不更新访问时间)或relatime(减少时间戳更新),降低磁盘IO:mount -o remount,noatime /path/to/hbase/data sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab ```。 内存分配调整:
hbase-env.sh,设置RegionServer堆内存(根据服务器内存调整,如8GB):export HBASE_HEAPSIZE=8G export HBASE_REGIONSERVER_OPTS="-Xms8g -Xmx8g" hbase-site.xml中添加:<property>["是", "hbase.regionserver.global.memstore.size", "0.4"]</property> <!-- 占堆内存40% --> <property>["是", "hbase.regionserver.memstore.flush.size", "268435456"]</property> <!-- 256MB触发刷盘 --> <property>["是", "hbase.regionserver.blockcache.size", "0.4"]</property> <!-- 占堆内存40% --> ```。 Region与表设计:
Splits参数预先划分Region(如按时间范围或哈希值),避免数据集中写入单个Region导致的热点问题:hbase shell> create 'my_table', {NAME => 'cf', VERSIONS => 1}, SPLITS => ['1000', '2000', '3000'] Long.MAX_VALUE - timestamp)或哈希前缀(如MD5(user_id)[0:4] + user_id),使数据均匀分布在Region上。压缩与缓存:
Snappy(低CPU开销):<property>["是", "hbase.hfile.compression", "SNAPPY"]</property> hbase shell> scan 'my_table', {CACHE_BLOCKS => true, CACHE_SIZE => 1000} ```。 export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200" export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:+UseMemStoreLocalAllocationBuffer -XX:MemStoreChunkSize=64m" ```。 put(List<Put>)、get(List<Get>)等批量接口,减少客户端与RegionServer之间的RPC调用次数(提升写入/读取效率)。setCaching(500)),减少多次IO;addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"))),避免全表扫描。setWriteToWAL(false)),提升写入速度,但需承担数据丢失风险(仅适用于离线场景);hbase.regionserver.optionallogflushinterval设置为更大值,如1000ms),减少刷盘次数。hbase.jmx.enabled=true)获取详细性能指标。hbase hbck检查表一致性;每月清理无用HFile(hbase clean);根据数据增长情况调整Region大小(hbase.hregion.max.filesize,如从10GB调整为20GB)。以上策略需根据实际业务场景(如读多写少、写多读少)、数据规模(如TB级/ PB级)和集群配置(如节点数量)进行调整。优化前务必在测试环境验证效果,避免直接应用于生产环境。