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