【问题标题】:Full scan of long table with huge amount of versions results only small part of rows对具有大量版本的长表进行全扫描仅导致一小部分行
【发布时间】:2017-09-21 17:42:17
【问题描述】:

我需要扫描大约 50 列的表,每列包含大约 100 个版本。没什么特别的(this.htable 恰到好处,HTableprocessor 旨在处理结果行):

    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。

【问题讨论】:

  • Roman,你是否也尝试过扫描hbase shell中的表?

标签: java hadoop hbase nosql


【解决方案1】:

我不确定您在 processRow 中有什么。但是键值对在结果对象内部。对于一个行键,您可以知道许多键值对。可能这可能是缺失点

for (Result result : resultScanner) {
  for (KeyValue kv : result.raw()) {
   Bytes.toString(kv.getQualifier());
   Bytes.toString(kv.getValue());
   Bytes.toString(result.getRow());
  }
 }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 2011-11-01
  • 2011-07-01
  • 2017-10-22
相关资源
最近更新 更多