与REST / Thrift相比,为何HBase Java Client速度较慢

我正在HBase
Java客户端/ Thrift / REST接口上运行一些性能测试.

我有一个名为“航空公司”的表,有500K行.

我通过4个不同的Java程序从表中获取所有500K行. (使用JAVA Client,Thrift,Thrift2和REST)

以下是具有各种提取大小的性能数字.
对于所有这些,批量大小设置为100000

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

Perf Numbers

我可以看到,在REST,Thrift和Thrift2的情况下,我们增加了提取大小,从而提高了性能.

但是使用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

你可以在循环之前调用这些函数……

资源
Pig的HBaseStorage #initScan功能

点赞