Hbase寫操作產(chǎn)生的木桶效應
生產(chǎn)環(huán)境中hbase的寫存在木桶效應,具體體現(xiàn)在hbase寫入數(shù)據(jù)緩慢,在參數(shù)優(yōu)化極好的情況下,仍然沒有解決問題。經(jīng)過多次的排查,產(chǎn)生問題的原因有2個:
1.網(wǎng)絡問題
某個節(jié)點的網(wǎng)卡出現(xiàn)不明顯故障,造成該節(jié)點網(wǎng)速傳輸速度下降。
2.異構(gòu)設備磁盤硬件I/O
有時候很多利舊設備不舍得丟棄,大數(shù)據(jù)集群又是一個廉價的高性能的分布式計算平臺,只要是能開機的物理機都可以并入集群,但是,隨之帶來的問題就是磁盤IO會嚴重影響集群的性能,不過現(xiàn)在通過技術(shù)手段已經(jīng)能夠解決此類問題,比較常用的方式就是:設備分組。
那么hbase為什么會出現(xiàn)木桶效應呢?首先我們都知道往hbase寫入數(shù)據(jù)的時候,是先寫入WAL的,寫入成功后再寫入memstore。
原來在Table創(chuàng)建的時候,有一個參數(shù)可以設置,是否每次寫Log日志都需要往集群里的其他機器同步一次,默認是每次都同步,同步的方式有2種:Pipeline,n-Way Writes。
Pipeline是指datanode接收數(shù)據(jù)后,再傳給另外一臺datanode,是一種串行的方式;
n-Way Writes是指多datanode同時接收數(shù)據(jù),最慢的一臺結(jié)束就是整個結(jié)束
差別在于一個延遲大,一個并發(fā)高。
那么從2個同步方式中可以看出,如果在同步時,其中某個節(jié)點的性能出現(xiàn)問題,從而會導致整個集群出現(xiàn)嚴重的寫延遲,這就是木桶效應的主要原因。
題外話:
hbase的日志有.logs和.oldlogs。.logs保存的是所有Regionserver上當前在寫入的HLog,.oldlogs是過期日志,通過hbase.master.logcleaner.ttl參數(shù)可以設置定期清理這個過期日志,默認是10分鐘