2017-04-14 54 views
4

我正在HBase Java客戶端/ Thrift/REST接口上運行一些性能測試。 我有一張名爲「航空公司」的表,它有500K行。 我通過4個不同的Java程序從表中取出所有500K行。 (使用JAVA客戶端,Thrift,Thrift2和REST)爲什麼HBase Java客戶端與REST/Thrift相比較慢

以下是具有各種讀取大小的性能數字。 對於所有這些批量大小設置100000


[Table which shows the performance numbers. All times are in ms][1] 

Perf Numbers


我可以看到的是,有一個性能改進,因爲我們增加REST的情況下,獲取大小,節儉和節儉2。

但是對於Java API,我看到了一致的性能,而與抓取大小無關。 爲什麼在JAVA客戶端中讀取大小不受影響?

這是我的Java程序


Table table = conn.getTable(TableName.valueOf("Airline")); 
Scan scan = new Scan(); 
ResultScanner scanner = table.getScanner(scan); 

for (Result[] result = scanner.next(fetchSize); result.length != 0; result = scanner.next(fetchSize)) 

的片段{ - 過程中的行 }


有人可以幫我在這。我是否使用錯誤的方法/類通過JAVA客戶端獲取數據。

+0

您的問題中的信息太少,無法猜測什麼可能是差異的原因。你正在使用的是什麼HBase版本?你使用默認配置還是你有自定義配置?您是否爲掃描儀設置了「緩存」? –

回答

1

您的掃描儀沒有正確設置以及時獲取所需的行數。換句話說,您正在調整ResultScanner,而不是實際進行掃描的東西,Scan對象。

我相信你想要的功能部分如下:

scan.setCaching 
scan.setCacheBlocks 

https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html

您將您的循環之前調用這些函數...

來源 豬的HBaseStorage #initScan功能

+0

謝謝你的回覆。 scan.setMaxResultSize()默認爲2MB,我更改爲10 MB,然後提供了良好的性能。我可以看到有100%的改善。但對於scan.setBatch()的不同值,我沒有看到任何性能差異。 –

+0

好的。傳統上你會做的是回答你自己的問題,並接受你的答案,因爲這是你的工作。如果您不介意這樣做,請從「未回答的問題」隊列中清除此問題。或者我可以在我的答案中加入'setMaxResultSize',你可以接受。無論什麼最適合你。讓我知道... – WattsInABox

相關問題