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降低不下來,則需要添加節點。