如果資料傳輸速度1ms那麼表示每秒可以處理1000次往返。
採用buffer方式傳送資料可以減少電腦執行RPC
Hbase Client端預設不使用緩衝區(buffer),
啟用buffer方法如下:
table.setAutoFlush(false);
將autoflush設定為false
如此一來可以將資料寫入client端的buffer
如果要強迫將資料寫入hbase時,呼叫
void flushCommits() throws IOException
刷新buffer兩種方式:
1.Explict flush(明確刷新):
直接在程式中呼叫flushCommets()
2.Implict flush(隱含刷新)
當呼叫put()或者setWriteBufferSize()會觸發flushCommits()
HTable的close() method也會觸發刷新
Configuration conf = HBaseConfiguration.create();
HBaseHelper help = HBaseHelper.getHelper(conf);
help.dropTable("usertable");
help.createTable("usertable", "cf1","cf2","cf3");
HTable table = new HTable(conf,"usertable");
System.out.println("Auto Flush:"+table.isAutoFlush());
table.setAutoFlush(false);
KeyValue kv = new KeyValue(Bytes.toBytes("RK1"),Bytes.toBytes("cf1"),Bytes.toBytes("qual"),Bytes.toBytes("value"));
Put put1 = new Put(Bytes.toBytes("RK1"));
put1.add(kv);
table.put(put1);
Put put2 =new Put(Bytes.toBytes("RK2"));
put2.add(Bytes.toBytes("cf1"),Bytes.toBytes("quali1"),Bytes.toBytes("val2"));
table.put(put2);
Get get =new Get(Bytes.toBytes("RK1"));
Result result = table.get(get);
System.out.println("FirstResult"+result);
table.flushCommits();
Result res2 =table.get(get);
System.out.println(res2);
table.close();
注意客戶端程式不可以中途中斷
否則緩衝區的資料可不會自己跑去Hbase
沒有留言:
張貼留言