我试图用Java API扫描整个Accumulo表。我已经验证了元信息都是正确的(凭据,ZooKeeper服务器,Accumlo实例ID,表名)。在这一点上,我在一个死胡同,所以任何建议都是感激的。
Accumulo版本1.6.2
从accumulo read client.
// scan the whole table
System.out.println("=== whole table ===");
Scanner tableScanner;
try {
tableScanner = conn.createScanner("geomesa3_records", new Authorizations());
// conn is of type Connector
// Connector and Scanner are implemented in org.apache.accumulo.core.client
// See links below for additional info
} catch (TableNotFoundException ex) {
throw new RuntimeException("table not found - was SimpleIngestClient run?");
}
System.out.println("-------------------------------------");
for(Map.Entry<Key, Value> kv : tableScanner) { // seemingly freezes here
System.out.println("----------------- new row ---------------");
System.out.println(kv.getKey().getRow() + " "
+ kv.getKey().getColumnFamily() + " "
+ kv.getKey().getColumnQualifier() + ": "
+ new String(kv.getValue().get()));
}
tableScanner.close();
System.out.println("-------------------------------------");
System.out.println("=== end table ===");
预期结果
=== whole table ===
-------------------------------------
----------------- new row ---------------
// table data
----------------- new row ---------------
// table data
----------------- new row ---------------
// table data
-------------------------------------
=== end table ===
实际结果
=== whole table ===
-------------------------------------
相关的Accumulo链接
Scanner
API
Connector
API用于createScanner
Scanner
接口
我想你可能需要在扫描仪上设置一个范围。要扫描整个表,只需像这样设置范围:
scanner.setRange(new Range());
此范围将匹配所有内容。具体来说,这个范围"从负无穷到正无穷"。基本上它匹配所有可能的键。
对于我的一个表的取所有操作,我使用了类似的策略。
另外,请注意这种事情肯定会导致问题。如果表变大,这可能需要很长时间才能运行。在我的例子中,我从不期望表增长到几百个逻辑行以上,所以我认为它是安全的。