我在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]
我可以看到,在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客户端获取数据。
答案 0 :(得分:1)
您的扫描仪未正确设置以及时获取所需的行数。换句话说,您正在调整ResultScanner,而不是实际进行扫描的事情,即Scan对象。
我相信您想要的功能部分以下内容:
scan.setCaching
scan.setCacheBlocks
https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html
你可以在循环之前调用这些函数......
<强>来源 Pig的HBaseStorage #initScan功能