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