HBase 學習一: 客戶端寫緩衝區 autoFlush
阿新 • • 發佈:2019-01-24
HBase的表操作,預設情況下客戶端寫緩衝區是關閉的,即table.isAutoFlush() = true, 這種情況下,對錶的單行操作會實時傳送到服務端完成。
因此,對於海量資料插入,修改,RPC通訊頻繁,效率比較低。這種場景下,可以通過啟用客戶端緩衝區,批量提交操作請求,提高操作效率。
下面是一個簡單的關於autoFlush的測試程式碼:
public static void autoFlushTest(){ HTable table; try { table = new HTable(conf, "test3"); //預設是不啟用,實時提交服務端處理請求. System.out.println("=====auto flush:" + table.isAutoFlush()); if (table.isAutoFlush()) table.setAutoFlush(false); //啟用緩衝區 System.out.println("=====auto flush2:" + table.isAutoFlush()); Put put = new Put(Bytes.toBytes("r1")); put.add(Bytes.toBytes("colf2"), Bytes.toBytes("q1"), Bytes.toBytes("v3")); put.add(Bytes.toBytes("colf2"), Bytes.toBytes("q2"), Bytes.toBytes("v4")); table.put(put); // 當setAutoFlush=false時,只有當緩衝區滿或呼叫table.close()時 // 或呼叫table.flushCommits()時 //客戶端才會將table操作提交服務端執行。 //table.flushCommits(); table.close(); System.out.println("=====auto flush4:" + table.isAutoFlush()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
缺點是如果程式崩潰,在緩衝區內的資料將會丟失,無法完成表操作。