91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-09 13:51:28 來源:億速云 閱讀:1187 作者:iii 欄目:云計算

本篇內容主要講解“hbase.hregion.max.filesize應該設置多少合適”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“hbase.hregion.max.filesize應該設置多少合適”吧!

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為瓶頸的系統的速度,因此平均吞吐量會受到一些影響而下降。
    綜合以上兩種情況,hbase.hregion.max.filesize不宜過大或過小,256MB或許是一個更理想的經驗參數。對于離線型的應用,調整為128MB會更加合適一些,而在線應用除非對split機制進行改造,否則不應該低于256MB

2 autoflush=false的影響

  無論是官方還是很多blog都提倡為了提高hbase的寫入速度而在應用代碼中設置autoflush=false,然后lz認為在在線應用中應該謹慎進行該設置。原因如下:

  a autoflush=false的原理是當客戶端提交delete或put請求時,將該請求在客戶端緩存,直到數據超過2M(hbase.client.write.buffer決定)或用戶執行了hbase.flushcommits()時才向regionserver提交請求。因此即使htable.put()執行返回成功,也并非說明請求真的成功了。假如還沒有達到該緩存而client崩潰,該部分數據將由于未發送到regionserver而丟失。這對于零容忍的在線服務是不可接受的。

  b autoflush=true雖然會讓寫入速度下降2-3倍,但是對于很多在線應用來說這都是必須打開的,也正是hbase為什么讓它默認值為true的原因。當該值為true時,每次請求都會發往regionserver,而regionserver接收到請求后第一件事就是寫hlog,因此對io的要求是非常高的,為了提高hbase的寫入速度,應該盡可能高地提高io吞吐量,比如增加磁盤、使用raid卡、減少replication因子數等

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風暴從而降低系統的整體吞吐量
  第三,從split方面考慮,由于hfile是以family為單位的,因此對于多個family來說,數據被分散到了更多的hfile中,減小了split發生的機率。這是把雙刃劍。更少的split會導致該region的體積比較大,由于balance是以region的數目而不是大小為單位來進行的,因此可能會導致balance失效。而從好的方面來說,更少的split會讓系統提供更加穩定的在線服務。而壞處我們可以通過在請求的低谷時間進行人工的split和balance來避免掉。
     因此對于寫比較多的系統,如果是離線應該,我們盡量只用一個family好了,但如果是在線應用,那還是應該根據應用的情況合理地分配family

4 hbase.regionserver.handler.count

 RegionServer端開啟的RPC監聽器實例個數,也即RegionServer能夠處理的IO請求線程數。默認是10.

 此參數與內存息息相關。該值設置的時候,以監控內存為主要參考。

 對于 單次請求內存消耗較高的Big PUT場景(大容量單次PUT或設置了較大cache的scan,均屬于Big PUT)或ReigonServer的內存比較緊張的場景,可以設置的相對較小。

 對于 單次請求內存消耗低,TPS(TransactionPerSecond,每秒事務處理量)要求非常高的場景,可以設置的相對大些。

到此,相信大家對“hbase.hregion.max.filesize應該設置多少合適”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永登县| 浦江县| 京山县| 香港| 鹿邑县| 双城市| 德惠市| 综艺| 凯里市| 新昌县| 龙陵县| 五常市| 云南省| 安徽省| 安乡县| 康马县| 屯门区| 锡林浩特市| 宁明县| 巴林右旗| 阳江市| 广河县| 浑源县| 巨鹿县| 卓资县| 教育| 工布江达县| 高碑店市| 布尔津县| 庄浪县| 广南县| 渭南市| 龙游县| 泸西县| 台安县| 鄂托克前旗| 屏东县| 于都县| 久治县| 呼和浩特市| 工布江达县|