CentOS環境下HBase性能調優策略
vm.swappiness=0),避免內存數據交換到磁盤導致性能驟降;ulimit -n 65535)和TCP緩沖區大?。?code>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.logroll.period,默認1小時),減少WAL寫入頻率;hbase.hregion.memstore.flush.size,默認128MB,可調整為256MB),減少Compaction次數。hbase.bucketcache.ioengine=offheap、hbase.bucketcache.size=8192),減少GC對緩存的影響;hbase.hregion.compress=snappy),平衡存儲空間與讀取性能;調整HFile塊大?。?code>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,避免單點過載;