1. 硬件基礎調優
2. JVM與GC調優
hbase-env.sh,設置HBASE_HEAPSIZE為物理內存的50%-70%(如8GB內存可設為export HBASE_HEAPSIZE=8G),避免堆內存過大導致GC停頓時間過長。hbase-env.sh中添加export HBASE_OPTS="$HBASE_OPTS -XX:+UseG1GC",平衡吞吐量與延遲。-XX:MaxGCPauseMillis=200(目標最大GC停頓時間,單位毫秒)、-XX:InitiatingHeapOccupancyPercent=75(觸發GC的堆內存占用閾值),減少Full GC次數及停頓時間。3. RegionServer核心參數調優
hbase.regionserver.global.memstore.size:控制所有Region的MemStore總大小占堆內存的比例,默認0.4(40%),可根據寫入負載調整(如寫入量大時可設為0.5,但需預留足夠內存給BlockCache)。hbase.regionserver.global.memstore.lower.limit:MemStore下限比例(默認0.38),當MemStore使用量達到此值時,會觸發異步刷新。hbase.hregion.memstore.flush.size:單個Region中MemStore的刷新閾值(默認128MB),建議設置為HDFS塊大?。ㄈ?28MB或256MB)的整數倍,避免小文件過多。hbase.regionserver.handler.count:處理客戶端請求的線程數,默認10。寫入負載高時可調大(如100-200),讀取負載高時可適當增加(如50-100),但需避免線程過多導致內存壓力上升。hbase.regionserver.wal.codec:使用org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec(默認),提升WAL寫入效率;hbase.wal.hsync:設置為true(默認),確保WAL數據持久化到磁盤,避免數據丟失。4. BlockCache與Compaction調優
hfile.block.cache.size:控制BlockCache占堆內存的比例,默認0.2(20%)。讀取負載高時可調大(如0.4-0.5),但需預留足夠內存給MemStore(建議MemStore與BlockCache比例約為1:1至1:2)。hbase.hstore.compaction.min:觸發小Compaction的最小HFile數量,默認3,可適當增加(如5-10)以減少Compaction頻率。hbase.hstore.compaction.max:單次Compaction的最大HFile數量,默認10,可根據節點性能調整(如15-20)。hbase.hstore.blockingStoreFiles:阻塞寫入的HFile數量閾值,默認15,當HFile數量超過此值時,寫入會被阻塞,需調大(如20-30)以避免寫入停頓。5. 數據模型設計優化
hbase.hcolumn.max.versions:設置列的最大版本數(默認1),根據業務需求調整(如歷史數據查詢需求大時可設為3-5);hbase.hcolumn.ttl:設置數據生存時間(默認永久),避免無用數據占用存儲空間。6. 預分區與批量操作
SPLIT參數預先創建多個Region(如create 'table_name', 'cf', SPLITS => ['1000', '2000', '3000']),避免后期數據增長導致Region傾斜,提升并行處理能力。BufferedMutator進行批量Put/Delete操作,減少RPC調用次數;設置hbase.client.write.buffer(默認2MB)增大寫入緩沖區大小,提升批量寫入效率。7. 監控與維護
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log),分析GC頻率與停頓時間,優化GC配置。major_compact命令清理過期數據、合并小HFile;清理無用表、Region,釋放存儲空間。