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最大文件大?。ㄈ?0-50GB),避免單個Region過大導致查詢變慢。hbase-regionserver.log),分析Full GC、慢查詢等問題,及時調整配置。