为什么HBase Java客户端比REST/Thrift慢

为什么HBase Java客户端比REST/Thrift慢,rest,hbase,thrift,Rest,Hbase,Thrift,我正在HBase Java client/Thrift/REST接口上运行一些性能测试。 我有一张叫做“Airline”的桌子,有500K行。 我正在通过4个不同的Java程序从表中获取所有500K行。(使用JAVA客户端、Thrift、Thrift2和REST) 以下是不同取数大小的性能数字。 对于所有这些,批量大小设置为100000 我可以看到,在REST、Thrift和Thrift2的情况下,当我们增加获取大小时,性能有所提高 但对于JavaAPI,我看到了一致的性能,而与获取大小无

我正在HBase Java client/Thrift/REST接口上运行一些性能测试。 我有一张叫做“Airline”的桌子,有500K行。 我正在通过4个不同的Java程序从表中获取所有500K行。(使用JAVA客户端、Thrift、Thrift2和REST)

以下是不同取数大小的性能数字。 对于所有这些,批量大小设置为100000



我可以看到,在REST、Thrift和Thrift2的情况下,当我们增加获取大小时,性能有所提高

但对于JavaAPI,我看到了一致的性能,而与获取大小无关。 为什么在JAVA客户机中获取大小不受影响

这是我的Java程序的一个片段


{ -处理行 }



有人能帮我吗。我是否使用错误的方法/类通过JAVA客户端获取数据

您的扫描仪设置不正确,无法及时获取所需的行数。换句话说,您正在调整ResultScanner,而不是实际执行扫描的对象,即扫描对象

我相信您需要的功能部分如下:

scan.setCaching
scan.setCacheBlocks

在循环之前调用这些函数

来源
Pig的hbastorage#initScan函数

您的问题中信息太少,无法猜测差异的原因。您正在使用的HBase版本是什么?您使用默认配置还是自定义配置?您是否为扫描仪设置了任何“缓存”?谢谢您的回复。setMaxResultSize()默认为2MB,我改为10MB,然后它的性能很好。我可以看到有100%的改善。但是对于scan.setBatch()的不同值,我没有看到性能上的任何差异。传统上,你会做的是回答你自己的问题并接受你的答案,因为这对你来说是有效的。如果您不介意这样做,它将从“未回答问题”队列中清除此问题。或者我可以将
setMaxResultSize
添加到我的答案中,您可以接受。什么对你最合适。让我知道。。。
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))
scan.setCaching
scan.setCacheBlocks