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

时间:2017-04-14 13:44:58

标签: rest hbase thrift

我在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 Client?

这是我的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客户端获取数据。

1 个答案:

答案 0 :(得分:1)

您的扫描仪未正确设置以及时获取所需的行数。换句话说,您正在调整ResultScanner,而不是实际进行扫描的事情,即Scan对象。

我相信您想要的功能部分以下内容:

scan.setCaching
scan.setCacheBlocks

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

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

<强>来源 Pig的HBaseStorage #initScan功能