HBase基於LSM模式,寫是寫HLOG及Memory的,也就是基本沒有隨機的IO,所以在寫鏈路上效能高效還比較平穩。很多時候,寫都是用可靠性來換取效能。
批量寫
也是為了減少rpc的次數
HTable.put(List<Put>)
Auto Flush
autoflush=false可以提升幾倍的寫效能,但是還是要注意,直到資料超過2 M(由hbase.client.write.buffer決定)或使用者執行了hbase.flushcommits()
時才向regionserver提交請求。需要注意並不是寫到了遠端。
HTable.setWriteBufferSize(writeBufferSize)可以設定buffer的大小。
服務端最佳化
WAL Flag
不寫WAL可以成倍提升效能,因為不需要寫HLog,減少3次IO,寫MemStore是記憶體操作。
是以資料可靠性為代價的,在資料匯入時,可以關閉WAL。
增大memstore的記憶體
當前可以調高Memstore 的數值,降低 BlockCache的數,跟讀取最佳化的思路正好相反。
大量的HFile產生
如果寫很快,很容易帶來大量的HFile,因為此時HFile合并的速度還沒有寫入的速度快。
需要在業務低峰期做majorcompaction,充分利用系統資源。如果HFile降低不下來,則需要添加節點。