2015-04-18 84 views
0

我試圖從HBase表使用前綴過濾器掃描一些行。我在HBase 0.96上。使用HBase API HBase數據訪問性能改進

我想增加每個RPC調用的吞吐量,以減少請求觸及區域的次數。

我在掃描對象上試過getCaching(int)和setCacheBlocks(true)。我也嘗試添加resultScanner.next(int)。使用所有這些組合,我仍然無法減少RPC調用的數量。我仍然爲每個密鑰命中HBase區域,而不是每個RPC調用帶來多個密鑰。

HBase區域服務器/ Datanode具有足夠的CPU和內存分配。另外我的數據均勻分佈在不同的區域服務器上。另外,我每次按鍵都帶回的數據並不多。

我觀察到,當我向表中添加更多數據時,請求所用的時間增加。當請求數量增加時它也增加。

謝謝你的幫助。

[R

+0

你能告訴你一些代碼嗎?前綴過濾器 –

+0

這裏是部分過濾器ArrayList filters = new ArrayList (); (字符串標誌:periodFlags) byte [] prefix = Bytes.toBytes(key1 +「_」+ key2 +「_」); filters.add(new PrefixFilter(prefix)); } FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE,filters);掃描條件=新掃描(Bytes.toBytes(key1 +「_」)); criteria.setFilter(filterList); – buckeyeosu

回答

0

Prefix過濾器通常是性能殺手,因爲他們執行全表掃描,始終使用啓動和停止排在你的掃描,而不是前綴過濾器。

Scan scan = new Scan(Bytes.toBytes("prefix"),Bytes.toBytes("prefix~")); 

當遍歷ResultResultScanner,每次迭代是一個RPC調用,您可以撥打resultScanner.next(n)取得了一批成果一氣呵成。

+0

我知道前綴過濾器是一個性能殺手,但我沒有完整的關鍵信息。所以我不能使用這個。是否有前綴過濾器的開始和停止?謝謝 – buckeyeosu

+0

我寫的實質上是一個前綴過濾器 –

+0

讓我試試看。謝謝 – buckeyeosu