hbase快速入門之---引數調優
阿新 • • 發佈:2019-02-10
Ø建立自定義的預分割槽
預設情況下,在建立HBase表的時候會自動建立一個region分割槽,當匯入資料的時候,所有的HBase客戶端都向這一個region寫資料,直到這個region足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先建立一些空的regions,這樣當資料寫入HBase時,會按照region分割槽情況,在叢集內做資料的負載均衡。
Ø增加Regionserver的處理執行緒
hbase.regionserver.handler.count是RegionServer端開啟的RPC監聽器例項個數,也即RegionServer能夠處理的IO請求執行緒數。預設是10.
此引數與記憶體息息相關。該值設定的時候,以監控記憶體為主要參考。
對於 單次請求記憶體消耗較高的Big PUT場景(大容量單次PUT或設定了較大cache的scan,均屬於Big
PUT)或ReigonServer的記憶體比較緊張的場景,可以設定的相對較小。
對於 單次請求記憶體消耗低,TPS(TransactionPerSecond,每秒事務處理量)要求非常高的場景,可以設定的相對大些。
Ø使用noatime
和nodiratime
掛載磁碟
如果你以noatime
掛載磁碟,訪問時間戳不會更新,當一個檔案在檔案系統中被讀的時候。在這個nodiratime
屬性情況中,掛載磁碟不會更新檔案系統中目錄的inode
訪問時間。因為它們沒有更多的磁碟I/O
更新訪問時間戳,這提升了檔案系統的訪問速度。
Ø把vm.swappiness
設定成0
來避免swap
Linux移動那些一段時間沒有被訪問的記憶體頁到swap
空間,即使它由足夠可用的記憶體。這叫做swap out。換一句話說,從swap
空間讀swapped out
的資料到記憶體中叫做swap
。如果HBase使用的記憶體被swapped了,HBase執行可能會遇到問題,如會增加GC時間等。
ØJava GC和
HBase堆設定
因為HBase
執行在JVM,JVM
的 Garbage Collection(GC) 設定對於HBase
流暢的執行,更高的效能是非常重要的。建議HBase 的最大堆記憶體不要超過16 GB,並將垃圾回收機制設定為CMS。
同時HBase
程序輸出到它們的GC
日誌中是同樣重要的,可以根據GC
日誌來定位問題,或調整JVM
設定。
另外可以設定hbase.hregion.memstore.mslab.enabled為true,來預防老年代堆碎片,減少因記憶體碎片導致的Full
GC,提高整體效能
Ø增加HBase使用者的File
handles和process limits
作業系統預設的nofile、
nproc對於HBase來說偏小,在高併發的情況下會使用HBase出現問題。建議增大nofile、
nproc設定。
Ø增加DATANODE處理執行緒數
HBase以Datanode做為底層的儲存,可能會同時開啟較多的hdfs檔案,因些需要增大預設的dfs.datanode.max.transfer.threads引數。
Øhbase.hregion.max.filesize
在當前ReigonServer上單個Reigon的最大儲存空間,單個Region超過該值時,這個Region會被自動split成更小的region。對於0.90.x版本該引數的最大值為4GB,之後的版本最大值
可以達到20GB,5到10GB是最優的。
Ø增大zookeeper的maxClientCnxns
預設zookeeper給每個客戶端IP使用的連線數為10個,可能會出現連線不夠用的情況。可以增大maxClientCnxns引數。
Ø增大hbase.hstore.blockingStoreFiles
在flush時,當一個region中的Store(Coulmn
Family)內有超過7個storefile時,則block所有的寫請求進行compaction,以減少storefile數量。可以增加為20。
Øhfile.block.cache.size
storefile的讀快取佔用Heap的大小百分比,0.2表示20%。該值直接影響資料讀的效能。如果寫比讀少很多,可以開到0.4-0.5。如果讀寫較均衡,0.3左右。如果寫比讀多,可以使用預設值。