为什么HBase Java客户端与REST/Thrift相比较慢
我正在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]
我可以看到的是,有一个性能改进,因为我们增加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客户端获取数据。
您的扫描仪没有正确设置以及时获取所需的行数。换句话说,您正在调整ResultScanner,而不是实际进行扫描的东西,Scan对象。
我相信你想要的功能部分如下:
scan.setCaching
scan.setCacheBlocks
https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html
您将您的循环之前调用这些函数...
来源 猪的HBaseStorage #initScan功能
谢谢你的回复。 scan.setMaxResultSize()默认为2MB,我更改为10 MB,然后提供了良好的性能。我可以看到有100%的改善。但对于scan.setBatch()的不同值,我没有看到任何性能差异。 –
好的。传统上你会做的是回答你自己的问题,并接受你的答案,因为这是你的工作。如果您不介意这样做,请从“未回答的问题”队列中清除此问题。或者我可以在我的答案中加入'setMaxResultSize',你可以接受。无论什么最适合你。让我知道... – WattsInABox
您的问题中的信息太少,无法猜测什么可能是差异的原因。你正在使用的是什么HBase版本?你使用默认配置还是你有自定义配置?您是否为扫描仪设置了“缓存”? –