總網頁瀏覽量

2013年10月7日 星期一

Clinet端寫入Buffer

每個put操作都是遠端程序呼叫(Remote procedure call,RPC),將資料從client端傳輸至server並返回。

如果資料傳輸速度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

沒有留言:

張貼留言