<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                自動拆分有以下策略。 **1. ConstantSizeRegionSplitPolicy**(了解即可) 在 0.94 版本的時候 HBase 只有一種拆分策略。這個策略非常簡單,從名字上就可以看出這個策略就是按照固定大小來拆分 Region。控制它的參數是: | hbase.hregion.max.filesize | Region 的最大大小。默認是 10GB| | --- | --- | 當單個 Region 大小超過了 10GB,就會被 HBase 拆分成為 2 個 Region。采用這種策略后的集群中的 Region大小很平均,理想情況下都是5GB。由于這種策略太簡單了,所以不再詳細解釋了。<br/> **2. IncreasingToUpperBoundRegionSplitPolicy**(0.94 版本后默認,需要掌握理解)。 0.94 版本之后,有了 IncreasingToUpperBoundRegionSplitPolicy 策略。這種策略從名字上就可以看出是限制不斷增長的文件尺寸的策略。依賴以下公式來計算文件尺寸的上限增長: ```[math] Math.min(tableRegionsCounts^3 * initialSize,defaultRegionMaxFileSize) ``` `tableRegionCount`:表在所有 RegionServer 上所擁有的 Region 數量總和。 `initialSize`:如果定義了 hbase.increasing.policy.initial.size,則使用這個數值;如果沒有定義,就用 memstore 的刷寫大小的2倍 ,hbase.hregion.memstore.flush.size * 2。 `defaultRegionMaxFileSize` : ConstantSizeRegionSplitPolicy 所用到的hbase.hregion.max.filesize,即 Region 最大大小。 <br/> 假如 hbase.hregion.memstore.flush.size 定義為 128MB,那么文件尺寸的上限增長將是這樣: ( 1 ) 剛 開 始 只 有 一 個 region 的 時 候 , 上 限 是 256MB ,因為 `$ 1^3 *128*2=256MB $`。 (2)當有 2 個 region 的時候,上限是 2GB,因為 `$ 2^3 * 128*2=2048MB $`。 (3)當有 3 個文件的時候,上限是 6.75GB,因為 `$ 3^3 * 128 * 2=6912MB $`。 (4)以此類推,直到計算出來的上限達到 hbase.hregion.max.filesize 所定義region 的 默認的10GB。 走勢圖如下圖: ![](https://img.kancloud.cn/9b/65/9b6563ac7f32300c234c65cce7837513_700x415.png) 當 Region 個數達到 4 個的時候由于計算出來的上限已經達到了 16GB,已經大于 10GB 了,所以后面當 Region 數量再增加的時候文件大小上限已經不會增加了。在最新的版本里 IncreasingToUpperBoundRegionSplitPolicy 是默認的配置。 <br/> **3. KeyPrefixRegionSplitPolicy**(擴展內容) 除了簡單粗暴地根據大小來拆分,我們還可以自己定義拆分點。KeyPrefixRegionSplitPolicy 是 IncreasingToUpperBoundRegionSplitPolicy 的子類,在前者的基礎上,增加了對拆分點(splitPoint,拆分點就是 Region 被拆分處的rowkey)的定義。它保證了有相同前綴的 rowkey 不會被拆分到兩個不同的 Region 里面。這個策略用到的參數如下: | `KeyPrefixRegionSplitPolicy.prefix_length` | rowkey 的前綴長度 | | --- | --- | 該策略會根據 KeyPrefixRegionSplitPolicy.prefix_length 所定義的長度來截取rowkey 作為分組的依據,同一個組的數據不會被劃分到不同的 Region 上。比如rowKey 都是 16 位的,指定前 5 位是前綴,那么前 5 位相同的 rowKey 在進行 region split 的時候會分到相同的 region 中。用默認策略拆分跟用KeyPrefixRegionSplitPolicy 拆分的區別如下: :-: ![](https://img.kancloud.cn/1e/05/1e05351d6646ec6018c1a2eadd5e6c4a_781x429.png) 默認策略拆分結果圖 ![](https://img.kancloud.cn/90/7b/907b50b7a05ab24026a0c3f97a336527_880x491.png) KeyPrefixRegionSplitPolicy(前 2 位)拆分結果圖 <br/> 如果你的所有數據都只有一兩個前綴,那么 KeyPrefixRegionSplitPolicy 就無效了,此時采用默認的策略較好。如果你的前綴劃分的比較細,你的查詢就比較容易發生跨 Region 查詢的情況,此時采用 KeyPrefixRegionSplitPolicy 較好。<br/> 所以這個策略適用的場景是:數據有多種前綴。查詢多是針對前綴,比較少跨越多個前綴來查詢數據。 <br/> **4. DelimitedKeyPrefixRegionSplitPolicy**(擴展內容) 該策略也是繼承自 IncreasingToUpperBoundRegionSplitPolicy,它也是根據你的 rowkey 前綴來進行切分的。唯一的不同就是:KeyPrefixRegionSplitPolicy 是根據 rowkey 的固定前幾位字符來進行判斷,而DelimitedKeyPrefixRegionSplitPolicy是根據分隔符來判斷的。有時候 rowkey 的前綴可能不一定都是定長的,比如你拿服務器的名字來當前綴,有的服務器叫 host12 有的叫 host1。這些場景下嚴格地要求所有前綴都定長可能比較難,而且這個定長如果未來想改也不容易。 DelimitedKeyPrefixRegionSplitPolicy 就給了你一個定義長度字符前綴的自由。使用這個策略需要在表定義中加入以下屬性: ``` DelimitedKeyPrefixRegionSplitPolicy.delimiter:前綴分隔符 ``` 比如你定義了前綴分隔符為`_`,那么 host1_001 和 host12_999 的前綴就分別是 host1 和 host12。 <br/> **5. BusyRegionSplitPolicy**(擴展內容) 此前的拆分策略都沒有考慮熱點問題。所謂熱點問題就是數據庫中的Region 被訪問的頻率并不一樣,某些 Region 在短時間內被訪問的很頻繁,承載了很大的壓力,這些 Region 就是熱點 Region。BusyRegionSplitPolicy 就是為了解決這種場景而產生的。它是如何判斷哪個 Region 是熱點的呢,首先先要介紹它用到的參數: **`hbase.busy.policy.blockedRequests`**:請求阻塞率,即請求被阻塞的嚴重程度。取值范圍是 0.0~1.0,默認是 0.2,即 20%的請求被阻塞的意思。 **`hbase.busy.policy.minAge`**:拆分最小年齡,當 Region 的年齡比這個小的時候不拆分,這是為了防止在判斷是否要拆分的時候出現了短時間的訪問頻率波峰,結果沒必要拆分的 Region 被拆分了,因為短時間的波峰會很快地降回到正常水平。單位毫秒,默認值是 600000,即 10 分鐘。 **`hbase.busy.policy.aggWindow`**:計算是否繁忙的時間窗口,單位毫秒,默認值是 300000,即 5 分鐘。用以控制計算的頻率。計算該 Region 是否繁忙的計算 方法如下: ``` 如果"當前時間–上次檢測時間>=hbase.busy.policy.aggWindow",則進行如下計算: 這段時間被阻塞的請求/這段時間的總請求=請求的被阻塞率(aggBlockedRate) 如果"aggBlockedRate > hbase.busy.policy.blockedRequests",則判斷該 Region為繁忙。 ``` 如果你的系統常常會出現熱點 Region,而你對性能有很高的追求,那么這種策略可能會比較適合你。它會通過拆分熱點 Region 來緩解熱點 Region 的壓力,但是根據熱點來拆分 Region 也會帶來很多不確定性因素,因為你也不知道下一個被拆分的 Region 是哪個。 <br/> **6. DisabledRegionSplitPolicy** 這種策略其實不是一種策略。如果你看這個策略的源碼會發現就一個方法shouldSplit,并且永遠返回 false。所以設置成這種策略就是 Region 永不自動拆分。<br/> 如果使用 DisabledRegionSplitPolicy 讓 Region 永不自動拆分之后,你依然可以通過手動拆分來拆分 Region。<br/> 這個策略有什么用?無論你設置了哪種拆分策略,一開始數據進入 Hbase的時候都只會往一個 Region 塞數據。必須要等到一個 Region 的大小膨脹到某個閥值的時候才會根據拆分策略來進行拆分。但是當大量的數據涌入的時候,可能會出現一邊拆分一邊寫入大量數據的情況,由于拆分要占用大量 IO,有可能對數據庫造成一定的壓力。如果你事先就知道這個 Table 應該按怎樣的策略來拆分Region 的話,你也可以事先定義拆分點(SplitPoint)。所謂拆分點就是拆分處的rowkey,比如你可以按 26 個字母來定義 25 個拆分點,這樣數據一到 HBase 就會被分配到各自所屬的 Region 里面。這時候我們就可以把自動拆分關掉,只用手動拆分。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看