我有一个案例,我需要扫描约50列的表,每列包含约100个版本。没有什么特别的(this.htable
恰好适合HTable
而processor
旨在处理结果行):
final Scan scan = new Scan();
scan.setCaching(1000);
scan.setMaxVersions(Integer.MAX_VALUE);
final ResultScanner rs = this.table.getScanner(scan);
try {
for (Result r = rs.next(); r != null; r = rs.next()) {
processor.processRow(r);
}
} finally {
rs.close();
}
当我尝试在这样的方法表中扫描大约20 x 10 ^ 6行时,我只得到大约50 x 10 ^ 3行。对扫描器没有特殊配置,HBase为0.98.1(CDH5.1)。我在这里想念什么?是HBase的一些缺点还是我做了一些严重的错误?我能检查什么?我检查了结果大小限制(不是大小写),你看到配置了maxVersions。谁可以限制此类扫描?
更新
已检查返回的Result
个实例,其内部的Cell
个实例与预期结果的数量严重不同。还有一次,表大约是20 x 10 ^ 6行,可以通过相同的代码计算,没有最大版本配置。返回的WITH行数约为50 * 10 ^ 3.
答案 0 :(得分:1)
我不确定你在processRow中有什么。但是键值对是在结果对象中。对于一行键,您可以知道许多键值对。可能这可能是缺失点
for (Result result : resultScanner) {
for (KeyValue kv : result.raw()) {
Bytes.toString(kv.getQualifier());
Bytes.toString(kv.getValue());
Bytes.toString(result.getRow());
}
}