HBase效能優化的四個要點

2021-06-21 22:43:10 字數 2320 閱讀 5300

1 hbase.hregion.max.filesize應該設定多少合適

預設值:256m

說明:maximum hstorefile size. if any one of a column families' hstorefiles has grown to exceed this value, the hosting hregion is split in two.

hstorefile的最大值。如果任何乙個column family(或者說hstore)的hstorefiles的大小超過這個值,那麼,其所屬的hregion就會split成兩個。

調優:hbase中hfile的預設最大值(hbase.hregion.max.filesize)是256mb,而google的bigtable**中對tablet的最大值也推薦為100-200mb,這個大小有什麼秘密呢?

眾所周知hbase中資料一開始會寫入memstore,當memstore滿64mb以後,會flush到disk上而成為storefile。當storefile數量超過3時,會啟動compaction過程將它們合併為乙個storefile。這個過程中會刪除一些timestamp過期的資料,比如update的資料。而當合併後的storefile大小大於hfile預設最大值時,會觸發split動作,將它切分成兩個region。

lz進行了持續insert壓力測試,並設定了不同的hbase.hregion.max.filesize,根據結果得到如下結論:值越小,平均吞吐量越大,但吞吐量越不穩定;值越大,平均吞吐量越小,吞吐量不穩定的時間相對更小。

為什麼會這樣呢?推論如下:

a 當hbase.hregion.max.filesize比較小時,觸發split的機率更大,而split的時候會將region offline,因此在split結束的時間前,訪問該region的請求將被block住,客戶端自我block的時間預設為1s。當大量的region同時發生split時,系統的整體訪問服務將大受影響。因此容易出現吞吐量及響應時間的不穩定現象

b 當hbase.hregion.max.filesize比較大時,單個region中觸發split的機率較小,大量region同時觸發split的機率也較小,因此吞吐量較之小hfile尺寸更加穩定些。但是由於長期得不到split,因此同乙個region內發生多次compaction的機會增加了。compaction的原理是將原有資料讀一遍並重寫一遍到hdfs上,然後再刪除原有資料。無疑這種行為會降低以io為瓶頸的系統的速度,因此平均吞吐量會受到一些影響而下降。

2 autoflush=false的影響

3 從效能的角度談table中family和qualifier的設定

對於傳統關係型資料庫中的一張table,在業務轉換到hbase上建模時,從效能的角度應該如何設定family和qualifier呢?

最極端的,①每一列都設定成乙個family,②乙個表僅有乙個family,所有列都是其中的乙個qualifier,那麼有什麼區別呢?

從讀的方面考慮:

family越多,那麼獲取每乙個cell資料的優勢越明顯,因為io和網路都減少了。

如果只有乙個family,那麼每一次讀都會讀取當前rowkey的所有資料,網路和io上會有一些損失。

當然如果要獲取的是固定的幾列資料,那麼把這幾列寫到乙個family中比分別設定family要更好,因為只需一次請求就能拿回所有資料。

從寫的角度考慮:

首先,記憶體方面來說,對於乙個region,會為每乙個表的每乙個family分配乙個store,而每乙個store,都會分配乙個memstore,所以更多的family會消耗更多的記憶體。

其次,從flush和compaction方面說,目前版本的hbase,在flush和compaction都是以region為單位的,也就是說當乙個family達到flush條件時,該region的所有family所屬的memstore都會flush一次,即使memstore中只有很少的資料也會觸發flush而生成小檔案。這樣就增加了compaction發生的機率,而compaction也是以region為單位的,這樣就很容易發生compaction風暴從而降低系統的整體吞吐量。

4 hbase.regionserver.handler.count

regionserver端開啟的rpc***例項個數,也即regionserver能夠處理的io請求執行緒數。預設是10.

此引數與記憶體息息相關。該值設定的時候,以監控記憶體為主要參考。

對於 單次請求記憶體消耗較高的big put場景(大容量單次put或設定了較大cache的scan,均屬於big put)或reigonserver的記憶體比較緊張的場景,可以設定的相對較小。

對於 單次請求記憶體消耗低,tps(transactionpersecond,每秒事務處理量)要求非常高的場景,可以設定的相對大些。

影響oracle效能的四個方面

影響oracle效能會有很多方面的原因,總體來說可以分為四個方面 1.硬體的環境 cpu,記憶體,網路傳輸條件等均會影響到oracle的效能.硬體方面的例子,不用舉例大家也會有所了解,這裡不再詳細說明.2.資料庫執行時的配置引數也會影響到oracle的效能.下面以我曾經給網通公司做的專案中涉及到的為...

辦好線上會議,四個要點要記牢

對於辦會者而言,把線上活動真正做出效果需要考量的因素有很多,其中有四個要點需要去腳踏實地完成。高質量內容需要明確主題之後,精準抓住目標人群,使得直播內容投其所好,打造內容差異化,讓內容真正對使用者產生價值,培養使用者對品牌的好感。鯨會務支援多種內容形式的直播,包括幻燈片 源 檔案 等形式內容,同時支...

事物的四個特性和四個隔離級別

事物是一條或者多條sql語句組成的執行序列,這個序列中的所有語句都屬於同乙個工作單元,要麼同時完成,其中如果有乙個失敗,則其他操作都要回滾。事物是乙個不可分割的資料庫邏輯工作單位,要麼全部完成,要不失敗回滾。事務執行的結果必須使資料庫從乙個一致性狀態變到另乙個一致性狀態。乙個事物的執行不能被別的併發...