我正在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客户端?
这是我的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功能