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,這方面的資料好少,等我裝好測試過再來更新這篇文章。