1. 程式人生 > >hbase入庫效率提升研究(一)

hbase入庫效率提升研究(一)

      最近在研究hbase,查詢效率確實不錯,不過入庫效率不理想,今天週五就小結以下。

      hbase使用java 的api入庫很簡單:

      Configuration conf = HBaseConfiguration.create();

      HTable table = new HTable();

      Put p = new Put("表名");

      p.add(("族列名").getBytes(), "欄位名".getBytes(),"值".getBytes());

      p.add...

      table.put(p);

      不過在最初的時候,錄入一個8列的資料檔案,入庫的效率只有0.5MB/s,9716行/s。

     後來做了若干改進,速度能達到0.8MB/s,1470行/s

      具體如下:

      1、修改hbase的BufferSize,並禁用hbase的自動提交功能

      table.setWriteBufferSize(1024*1024*10);//這裡預設值其實是64MB,所以應該改大一點比較好!

      table.setAutoFlush(false);

      2、禁用hbase的預寫日誌功能(WAL)

      p.setWriteToWAL(false);  //p為已近add資料後的Put物件

      這些在hbase的wiki上看到過,後面準備新增lzo壓縮演算法來進行優化,希望能有好的結果。wiki上還有些提高hbase叢集效能的方法,例如:

      修改regionserver的puts的handler數

      將java調整為-server模式???

      提升記憶體,修改hbase-env.sh中的HEAP_SIZE=4000

      使用64位作業系統和64位JVM

      取消swap

      提升CPU

      建表時設定blocksize的大小,合理的region size大小,合理的regionserver flush 大小。

      虛擬機器引數調優:-XX:+UseParNewGC and -XX:+UseConcMarkSweepGC

      前2個試過沒什麼作用,希望有研究過的同學能不吝賜教。

      這幾天在弄lzo,這方面的資料好少,等我裝好測試過再來更新這篇文章。