HBase 內核組件協調及RegionServer JVM參數調優-OLAP商業環境實戰

本套技術專欄是做者(秦凱新)平時工做的總結和昇華,經過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和集羣環境容量規劃等內容,請持續關注本套博客。版權聲明:禁止轉載,歡迎學習。QQ郵箱地址:1120746959@qq.com,若有任何學術交流,可隨時聯繫。學習

1 弱化的Master

HBase中Master的角色被弱化了,就算短期待機都不會受影響,但不能宕機時間過久,數據的讀取和寫入都跟他沒有什麼關係。那麼Master主要負責什麼呢?建立表,修改列族配置,Region的分割和合並操做。測試

2 幹保險業的WAL

HBase全部數據的寫入操做第一步先二話不說寫進WAL中,而後進一步寫進MemStore中。等到MemStore的數據達到必定的數量時才刷寫到最終存儲的HFile中。若是在刷寫的時候宕機或者斷電了,幹保險業的WAl就會起到數據恢復的做用。爲何呢?由於WAL是放在HDFS上的,宕機是不影響WAL文件的。spa

3 MemStore 真的是加速機嗎?

注意數據寫入到MemStore以前,是要先要寫入到WAL的,因此增長MemStore並不能加快寫入速度,MemStore最大的意義,在於維持數據按照rowkey的順序排列,進而數據在MemStore中被整理成LSM樹,最後再刷寫到HFile上。操作系統

4 Store 和 Column Family的關係

在一個RegionServer中,會有多個Region,而在每個Region中,會根據 Column Family生成多個Store。注意一個Store又會對應一個MemStore。而一個RegionServer對應一個全局的BlockCache。code

5 Minor compact 和 Major Compact

  • Minor compact :能夠用於把多個HFile文件進行合併,同時能夠刪除TTL過時的數據,可是手動刪除數據操做是不能被刪除的。爲何這裏能夠刪除TTL過時的數據?由於MemStore在LSM整理時,對於TTL過時只要不寫入HFile文件就算是刪除了,而對於手動刪除數據操做則可能位於不一樣的HFile文件中,所以作不到刪除。cdn

  • Major Compact:是把一個Store中的HFile文件合併爲一個HFile文件,而不是把一個Region內的全部HFile文件,由於一個Region可能有多個Column Family對應的Store。blog

6 RegioneServer的JVM參數調優

  • 編輯hbase-env . sh,調整HBASE_HEAPSIZE大小,默認是1G,而MemStore則佔用40%,也就是400M。顯然是不夠的。所以須要根據須要設置,好比:進程

    export HBASE_HEAPSIZE =8G
    複製代碼
  • HBase JVM 最大使用內存調整:內存

    (1) HBASE_MASTER_OPTS資源

    export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS  -Xmx4g -Xms4g"
    複製代碼

    (2) HBASE_REGIONSERVER_OPTS

    export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS  -Xms8g -Xmx8g"
    複製代碼

    注意永遠至少留10%的內存給操做系統。

  • 舉例以下:一臺16GB的機器,上面有MapReduce服務,RegionServer 和 DataNode

    分配策略以下:

    • 系統進程:2G
    • MapReduce:8GB
    • RegionServer服務:4GB
    • TaskTracker:1GB
    • DataNode:1GB

7 朱麗葉暫停FULL GC

  • 緣由主要是Zookeeper惹的禍,在RegionServer發生FULL GC的時候,STW期間太長,被ZK標記爲宕機,當RegionerServer GC完成後,甦醒了發現被標記爲宕機了,這時候RegionerServer GC就自殺,防止腦裂發生。醒來再自殺,朱麗葉暫停,哈哈!

  • JVM提供4種GC方案

    • 若是你的RegionServer內存大於32GB,建議使用G1GC策略,由於G1Gc會把堆內存劃分爲多個Region,而後對各個Region單獨進行GC,這樣總體的Full GC 能夠被最大限度地避免。另外經過設置MaxGCPauseMillis最大暫停時間,避免時間太長RegionServer自殺。

      export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS  -Xms8g -Xmx8g  -XX:+UseG1GC
      -XX:+MaxGCPauseMillis=100"
      複製代碼
    • 若是你的RegionServer內存小於4GB,就不須要考慮G1GC策略了,直接使用

      -XX:+UseParNewGC (年輕代使用)
      -XX:+UseConcMarkSweepGC(年老代使用)
      export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS  -Xms8g -Xmx8g 
      -XX:+UseParNewGC -XX:+UseConcMarkSweepGC "
      複製代碼

8 Justin Kestelyn 測試調優論文

  • 32GB heap : -XX:G1NewSizePercent=3 設置要用做年輕代大小最小值的堆百分比。默認值是 Java 堆的 5%。這是一個實驗性的標誌
  • 64GB heap: -XX:G1NewSizePercent=2
  • 100GB 或者更大的heap時,-XX:G1NewSizePercent=1

9 總結

網上的Hbase調優資料良莠不齊,實在是不忍卒讀,有些都是拼湊且版本過期的東西,我這裏決定綜合全部優質資源進行整合,寫一份最全,最有深度,不過期的技術博客。辛苦成文,各自珍惜,謝謝!

本套技術專欄是做者(秦凱新)平時工做的總結和昇華,經過從真實商業環境抽取案例進行總結和分享,並給出商業應用的調優建議和集羣環境容量規劃等內容,請持續關注本套博客。版權聲明:禁止轉載,歡迎學習。QQ郵箱地址:1120746959@qq.com,若有任何學術交流,可隨時聯繫。

秦凱新 於深圳 20182309

相關文章
相關標籤/搜索