2017-04-14 127 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

相关问题