1、Hbase 寫入慢時的集羣異常指標html
關於hbase寫入優化的文章不少,這裏主要記錄下,生產hbase集羣針對寫入的一次優化過程。服務器
hbase寫入慢時,從hbase集羣監控到的一些指標 -hbase 採用HDP 2.6 ,Hbase -1.1.2app
基於此 任務 目前的寫入慢,並不是集羣硬件配置形成,而是hbase集羣參數設計等設置有問題。負載均衡
2、從新梳理了hbase了 寫入流程
異步
hbase 寫入流程,這裏就不在追溯,以上是根據理解,本身畫的寫入流程圖 。能夠查詢的資料較多,這裏推薦幾個地址async
hbase 社區 http://hbase.group/
w3c:https://www.w3cschool.cn/hbase_doc/hbase_doc-vxnl2k1n.html
牛人博客:https://www.iteblog.com/archives/category/hbase/分佈式
3、參數優化優化
基於以上,優化的思路主要分爲以下 ui
3.1 利用分佈式集羣優點,確保請求負載均衡線程
結合具體數據的RowKey特徵建立預分區,注意:若是rowkey 業務數據爲GUID,此時要注意guid 的首字母已經作了限制 即0-9 a-f 此時建立再多的分區,起做用的僅是0-9 a-f 開頭的分區
create 'Monitor_RowDataMapping6','d', SPLITS => ['HSF.Response.Receive|', 'HSF.Response.Sent|', 'Teld.SQL|','HSF.Request.Time|', 'HSF.Request.Count|', 'HSF.Request.Receive|','HSF.Request.Sent|','Teld.Boss|','Teld.Core|','Teld.Redis|','Teld.WebApi|','TeldSG.Invoke|']
3.2 減小集羣阻止寫入的頻率和時間
對於寫入量很大的監控數據不在寫入wal,alter 'Monitor_RowData', METHOD => 'table_att', DURABILITY => 'SKIP_WAL‘
因爲region split 期間,大量的數據不能讀寫,防止對大的region進行合併形成數據讀寫的時間較長,調整對應的參數,
若是region 大小大於20G,則region 不在進行split
hbase.hstore.compaction.max.size 調整爲20G 默認爲 Long.MAX_VALUE(9223372036854775807)
region server在寫入時會檢查每一個region對應的memstore的總大小是否超過了memstore默認大小的2倍(hbase.hregion.memstore.block.multiplier決定),
若是超過了則鎖住memstore不讓新寫請求進來並觸發flush,避免產生OOM
hbase.hregion.memstore.block.multiplier 生產爲8 默認爲2
Memstore 在flush前,會進行storeFile的文件數量校驗,若是大於設定值,則阻止這個Memsore的數據寫入,
等待其餘線程將storeFile進行合併,爲了建設合併的機率,建設寫入的阻塞,提升該參數值
寫入數據量比較大的狀況下,避免region中過多的待刷新的memstore,增長memstore的刷新線程個數
hbase.hstore.flusher.count 調整到20 默認爲1
3.3 增長RegionServer 服務端的處理能力
hbase.regionserver.handler.count 默認值爲10 調整到400
3.4 客戶端請求參數設置
hbase.rest.threads.max 調整到400