在開發中,突然遇到了發現Hbase的讀取和寫入變的非常慢,然后再次檢查了代碼,有兩個地方更改后性能有大幅的提升,說明如下。
網上優化可能很多,這個只是我簡單的實踐記錄。
1 讀取優化
Scan操作時候設置緩存
result.setCaching(10000)
result.setBatch(5000)
2 寫入優化
寫入慢最后發現是沒有控制一次發HBase的量,直接進行大量的數據一次性寫入,造成HBase卡死的一樣,更改如下:
val realSize = batchData.size()
if (realSize <= 5000) {
table.put(batchData)
} else {
val part = realSize / 5000
for (index <- 0 until part) {
table.put(batchData.subList(index * 5000, (index + 1) * 5000))
}
table.put(batchData.subList(part * 5000, realSize))
table.put(batchData.subList(0, 5000))
}
table.flushCommits()