put批量提交hbase效能改善

2021-09-01 17:18:18 字數 1502 閱讀 2139

在使用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...