優化原理:資料寫入流程可以理解為一次順序寫wal
(hlog
)加上一次寫快取(memstore
),通常情況下寫快取延遲很低,因此提公升寫效能就只能從wal
入手。wal
機制一方面是為了確保資料即使寫入快取丟失也可以恢復,另一方面是為了集群之間非同步複製。預設wal
機制開啟且使用同步機制寫入wal
。首先考慮業務是否需要寫wal
,通常情況下大多數業務都會開啟wal
機制(預設),但是對於部分業務可能並不特別關心異常情況下部分資料的丟失,而更關心資料寫入吞吐量,比如某些推薦業務,這類業務即使丟失一部分使用者行為資料可能對推薦結果並不構成很大影響,但是對於寫入吞吐量要求很高,不能造成資料佇列阻塞。這種場景下可以考慮關閉wal
寫入,寫入吞吐量可以提公升2x~3x
。退而求其次,有些業務不能接受不寫wal
,但可以接受wal
非同步寫入,也是可以考慮優化的,通常也會帶來1x~2x
的效能提公升。
優化推薦:根據業務關注點在wal
機制與寫入吞吐量之間做出選擇
優化原理:hbase
分別提供了單條put
以及批量put
的api
介面,使用批量put
介面可以減少客戶端到regionserver
之間的rpc
連線數,提高寫入效能。另外需要注意的是,批量put
請求要麼全部成功返回,要麼丟擲異常。
優化建議:使用批量put
進行寫入請求
優化原理:業務如果可以接受異常情況下少量資料丟失的話,還可以使用非同步批量提交的方式提交請求。提交分為兩階段執行,使用者提交寫請求之後,資料會寫入客戶端快取,並返回使用者寫入成功;當客戶端快取達到閾值(預設2m
)之後批量提交給regionserver
。需要注意的是,在某些情況下客戶端異常的情況下快取資料有可能丟失。
優化建議:在業務可以接受的情況下開啟非同步批量提交
使用方式:setautoflush(false)
優化原理:當前集群中表的region
個數如果小於regionserver
個數,即num(region of table) < num(regionserver)
,可以考慮切分region
並盡可能分布到不同regionserver
來提高系統請求併發度,如果num(region of table) > num(regionserver)
,再增加region
個數效果並不明顯。
優化建議:在num(region of table) < num(regionserver)
的場景下切分部分請求負載高的region
並遷移到其他regionserver
;
優化原理:另乙個需要考慮的問題是寫入請求是否均衡,如果不均衡,一方面會導致系統併發度較低,另一方面也有可能造成部分節點負載很高,進而影響其他業務。分布式系統中特別害怕乙個節點負載很高的情況,乙個節點負載很高可能會拖慢整個集群,這是因為很多業務會使用mutli批量提交讀寫請求,一旦其中一部分請求落到該節點無法得到及時響應,就會導致整個批量請求超時。因此不怕節點宕掉,就怕節點奄奄一息!
優化建議:檢查rowkey
設計以及預分割槽策略,保證寫入請求均衡。
keyvalue
大小對寫入效能的影響巨大,一旦遇到寫入效能比較差的情況,需要考慮是否由於寫入keyvalue
資料太大導致。隨著單行資料大小不斷變大,寫入吞吐量急劇下降,寫入延遲在100k
之後會急劇增大。
這個特性意味著可以將wal
單獨置於ssd
上,這樣即使在預設情況下(walsync
),寫效能也會有很大的提公升。需要注意的是,該特性建立在hdfs 2.6.0+
的基礎上,hdfs
以前版本不支援該特性。具體可以參考官方hbase-12848。
該特性也是對wal
進行改造,當前wal
設計為乙個regionserver
上所有region
共享乙個wal
,可以想象在寫入吞吐量較高的時候必然存在資源競爭,降低整體效能。針對這個問題,社群小夥伴提出multiple wals
機制,管理員可以為每個namespace
下的所有表設定乙個共享wal
,通過這種方式,寫效能大約可以提公升20%~40%
左右。具體可以參考官方hbase-14457。
hbase資料讀取優化 HBase效能優化 總結篇
1 hbase.hregion.max.filesize應該設定多少合適 預設值 256m 說明 maximum hstorefile size.if any one of a column families hstorefiles has?grown to exceed this value,th...
HBASE 讀取資料 優化
1 設定scan快取 scan.setcaching 1000 定義一次互動從服務端傳輸到客戶端的行數 2 顯示的指定列 scan.addcolumn cf,column 只獲取需要的列,減少傳輸的資料量,減少io的消耗 3 使用完resultscanner後關閉,否則可能出現一段時間內服務端一致儲...
HBase寫效能優化之引數篇
hbase.regionserver.handler.count hbase site.xml 預設值 10 引數說明 每個region server上的rpc handler的數量,提公升rpc handler的數量可以一定程度上提高hbase在處理大量併發時接收請求的能力 hbase heaps...