1. 程式人生 > >HBase 學習一: 客戶端寫緩衝區 autoFlush

HBase 學習一: 客戶端寫緩衝區 autoFlush

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();
		}
		
	}
缺點是如果程式崩潰,在緩衝區內的資料將會丟失,無法完成表操作。