在使用hbase put api的時候,有幾個會影響效能的因素。
1.put list size
hbase的put支援單條插入,也支援批量插入。
2. autoflush
autoflush指的是在每次呼叫hbase的put操作,是否提交到hbase server。 預設是true,每次會提交。如果此時是單條插入,就會有更多的io,從而降低效能
3.write buffer size
write buffer size在autoflush為false的時候起作用,預設是2mb,也就是當插入資料超過2mb,就會自動提交到server
4.wal
wal是write ahead log的縮寫,指的是hbase在插入操作前是否寫log。預設是開啟,關掉會提高效能,但是如果系統出現故障(負責插入的region server掛掉),資料可能會丟失。
下面是乙個簡單的測試:
table: 4個family 每行插入的資料4kb,每次提交1000行
wal=false,autoflush=false,buffer=25165824 insert complete,costs:0.4453ms/row
wal=false,autoflush=true,buffer=0 insert complete,costs:0.6ms/row
wal=true,autoflush=true,buffer=0 insert complete,costs:1.8797ms/row
可以看出在wal關閉,並且設定比較合適的buffer size,可以將效能提高到4到5倍.
測試**:
public class testinsert
private static void insert(boolean wal,boolean autoflush,long writebuffer)
throws ioexception
htable table = new htable(hbaseconfig, tablename);
table.setautoflush(autoflush);
if(writebuffer!=0)
listlp = new arraylist();
long all = system.currenttimemillis();
int count = 10000;
byte buffer = new byte[1024];
random r = new random();
for (int i = 1; i <= count; ++i)
}system.out.println("wal="+wal+",autoflush="+autoflush+",buffer="+writebuffer);
system.out.println("insert complete"+",costs:"+(system.currenttimemillis()-all)*1.0/count+"ms");
}}
HBASE筆記二 Get和Put
get 取資料過程 load and cached 只有第一次訪問此rowkey 訪問 root 獲取zookeeper的host 訪問 meta 獲得regionserver,meta 包含每個rowkey所在region srver 有快取時 使用storefile讀取資料 put 儲存資料 w...
Hbase中put和delete對hfile的操作
put和delete是hbase中最常見的操作,這些操作最終都是體現在對hfile的修改上。下面通過一些例子看下,當我們執行put和delete後,hfile中發生了什麼樣的變化。為了簡單,我們通過org.apache.hadoop.hbase.io.hfile.hfile來檢視hfile中的內容變...
oracle批量提交
create or replace procedure p cust bossorder sync is 存放t iiss boss order back是否存在 v tablecount number 2 0 定義變數 type v bossorder row is table of t cust...