簡體   English   中英

對具有大量版本的長表進行全面掃描只會導致一小部分行

[英]Full scan of long table with huge amount of versions results only small part of rows

我遇到的情況是,我需要掃描約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。 誰可以限制此類掃描?

UPDATE檢查返回的Result實例及其內部的Cell實例與預期結果的數量嚴重不同。 再有一次,表大約有20 x 10 ^ 6行,而沒有最大版本配置,同一代碼可以計數該行。 返回的WITH版本的行數約為50 * 10 ^ 3。

我不確定您在processRow中擁有什么。 但是鍵值對在結果對象內部。 對於一行鍵,您可以知道許多鍵/值對。 可能這可能是缺少的地方

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM