HBASE引數調優

2021-08-22 03:02:52 字數 4284 閱讀 6253

zookeeper.session.timeout
預設值:3分鐘(180000ms)

說明:regionserver與zookeeper間的連線超時時間。當超時時間到後,reigonserver會被zookeeper從rs集群清單中移除,hmaster收到移除通知後,會對這台server負責的regions重新balance,讓其他存活的regionserver接管.

調優:這個timeout決定了regionserver是否能夠及時的failover。設定成1分鐘或更低,可以減少因等待超時而被延長的failover時間。

不過需要注意的是,對於一些online應用,regionserver從宕機到恢復時間本身就很短的(網路閃斷,crash等故障,運維可快速介入),如果調低timeout時間,反而會得不償失。因為當reigonserver被正式從rs集群中移除時,hmaster就開始做balance了(讓其他rs根據故障機器記錄的wal日誌進行恢復)。當故障的rs在人工介入恢復後,這個balance動作是毫無意義的,反而會使負載不均勻,給rs帶來更多負擔。特別是那些固定分配regions的場景。

hbase.regionserver.handler.count
預設值:10

說明:regionserver的請求處理io執行緒數。

調優:

這個引數的調優與記憶體息息相關。

較少的io執行緒,適用於處理單次請求記憶體消耗較高的big put場景(大容量單次put或設定了較大cache的scan,均屬於big put)或reigonserver的記憶體比較緊張的場景。

較多的io執行緒,適用於單次請求記憶體消耗低,tps要求非常高的場景。設定該值的時候,以監控記憶體為主要參考。

這裡需要注意的是如果server的region數量很少,大量的請求都落在乙個region上,因快速充滿memstore觸發flush導致的讀寫鎖會影響全域性tps,不是io執行緒數越高越好。

壓測時,開啟enabling rpc-level logging,可以同時監控每次請求的記憶體消耗和gc的狀況,最後通過多次壓測結果來合理調節io執行緒數。

hbase.hregion.max.filesize
預設值:256m

說明:在當前reigonserver上單個reigon的最大儲存空間,單個region超過該值時,這個region會被自動split成更小的region。

調優:

小region對split和compaction友好,因為拆分region或compact小region裡的storefile速度很快,記憶體占用低。缺點是split和compaction會很頻繁。

特別是數量較多的小region不停地split, compaction,會導致集群響應時間波動很大,region數量太多不僅給管理上帶來麻煩,甚至會引發一些hbase的bug。

一般512以下的都算小region。

大region,則不太適合經常split和compaction,因為做一次compact和split會產生較長時間的停頓,對應用的讀寫效能衝擊非常大。此外,大region意味著較大的storefile,compaction時對記憶體也是乙個挑戰。

當然,大region也有其用武之地。如果你的應用場景中,某個時間點的訪問量較低,那麼在此時做compact和split,既能順利完成split和compaction,又能保證絕大多數時間平穩的讀寫效能。

既然split和compaction如此影響效能,有沒有辦法去掉?

compaction是無法避免的,split倒是可以從自動調整為手動。

只要通過將這個引數值調大到某個很難達到的值,比如100g,就可以間接禁用自動split(regionserver不會對未到達100g的region做split)。

再配合regionsplitter這個工具,在需要split時,手動split。

手動split在靈活性和穩定性上比起自動split要高很多,相反,管理成本增加不多,比較推薦online實時系統使用。

hbase.regionserver.global.memstore.upperlimit/lowerlimit
預設值:0.4/0.35

調優:

這是乙個heap記憶體保護引數,預設值已經能適用大多數場景。

引數調整會影響讀寫,如果寫的壓力大導致經常超過這個閥值,則調小讀快取hfile.block.cache.size增大該閥值,或者heap餘量較多時,不修改讀快取大小。

如果在高壓情況下,也沒超過這個閥值,那麼建議你適當調小這個閥值再做壓測,確保觸發次數不要太多,然後還有較多heap餘量的時候,調大hfile.block.cache.size提高讀效能。

還有一種可能性是?hbase.hregion.memstore.flush.size保持不變,但rs維護了過多的region,要知道 region數量直接影響占用記憶體的大小。

hfile.block.cache.size
預設值:0.2

說明:storefile的讀快取占用heap的大小百分比,0.2表示20%。該值直接影響資料讀的效能。

hbase.regionserver.global.memstore.upperlimit?,該值是memstore佔heap的最大百分比,兩個引數乙個影響讀,乙個影響寫。如果兩值加起來超過80-90%,會有oom的風險,謹慎設定。

hbase.hstore.blockingstorefiles
預設值:7

說明:在flush時,當乙個region中的store(coulmn family)內有超過7個storefile時,則block所有的寫請求進行compaction,以減少storefile數量。

調優:block寫請求會嚴重影響當前regionserver的響應時間,但過多的storefile也會影響讀效能。從實際應用來看,為了獲取較平滑的響應時間,可將值設為無限大。如果能容忍響應時間出現較大的波峰波谷,那麼預設或根據自身場景調整即可。 

hbase.hregion.memstore.block.multiplier
預設值:2

說明:當乙個region裡的memstore占用記憶體大小超過hbase.hregion.memstore.flush.size兩倍的大小時,block該region的所有請求,進行flush,釋放記憶體。雖然我們設定了region所占用的memstores總記憶體大小,比如64m,但想象一下,在最後63.9m的時候,我put了乙個200m的資料,此時memstore的大小會瞬間暴漲到超過預期的hbase.hregion.memstore.flush.size的幾倍。這個引數的作用是當memstore的大小增至超過hbase.hregion.memstore.flush.size 2倍時,block所有請求,遏制風險進一步擴大。

調優: 這個引數的預設值還是比較靠譜的。如果你預估你的正常應用場景(不包括異常)不會出現突發寫或寫的量可控,那麼保持預設值即可。如果正常情況下,你的寫請求量就會經常暴長到正常的幾倍,那麼你應該調大這個倍數並調整其他引數值,比如

hfile.block.cache.sizehbase.regionserver.global.memstore.upperlimit/lowerlimit,以預留更多記憶體,防止hbase server oom。

hbase.hregion.memstore.mslab.enabled
預設值:true

說明:減少因記憶體碎片導致的full gc,提高整體效能。

調優:

HBase集群調優

2.5.2.1.zookeeper.session.timeout 這個預設值是3分鐘。這意味著一旦乙個server宕掉了,master至少需要3分鐘才能察覺到宕機,開始恢復。你可能希望將這個超時調短,這樣master就能更快的察覺到了。在你調這個值之前,你需要確認你的jvm的gc引數,否則乙個長時...

HBase 系統調優指南

本篇面試內容劃重點 bloomfilter 預分割槽 資料傾斜 rowkey 設計。hbase 雖然沒有字段資訊也沒有型別的限制,但是建表的時候還是有很多需要注意的地方的,合理地配置表資訊可以使你寫的程式更高效地使用 hbase bloomfilter 布隆過濾器 預設值為 none,布隆過濾器的作...

MySQL引數調優

l 通用類 key buffer size 含義 用於索引塊的緩衝區大小,增加它可得到更好處理的索引 對所有讀和多重寫 影響 對於myisam 表的影響不是很大,myisam 會使用系統的快取來儲存資料,所以大量使用 myisam 表的機器記憶體很快就會耗盡。但是,如果你將該值設得過大 例如,大於總...