1

尝试的功能: 查询和检索与特定模式匹配的行。例如搜索条件 - rowID 像“Dining*”

(Accumulo 1.5,代理 API - CSharp)。

概括:

无法取回记录(在下面的代码片段中的 client.nextK 处失败)。我收到一条错误消息 - “结果 {nextK_result(Success: ,Ouch1: ,Ouch2: ,Ouch3: AccumuloSecurityException(Msg: java.lang.RuntimeException: org.apache.accumulo.core.client.impl.AccumuloServerException: 服务器上的错误192.168.1.44:9997))}"

我在下面的代码片段之后粘贴了日志文件内容。

代码片段:

List<String> artifactList = new List<String> ();

String rowRegex = rowID + "*";
String colfRegex = null;
String colqRegex = null;
String valueRegex = null;
String orFields = "false";

IteratorSetting iterSttng = new IteratorSetting();
iterSttng.Priority = 15;
iterSttng.Name = "rowIDRegexFilter";
iterSttng.IteratorClass="RegExFilter.class";

Dictionary<string, string> iterProperties = new Dictionary<string, string> ();
iterProperties.Add ("ROW_REGEX", rowRegex);
//iterProperties.Add ("COLF_REGEX", colfRegex);
//iterProperties.Add ("COLQ_REGEX", colqRegex);
//iterProperties.Add ("VALUE_REGEX", valueRegex);
//iterProperties.Add ("OR_FIELDS", orFields);

iterSttng.Properties=iterProperties;

List<IteratorSetting> listIterSttngs = new List<IteratorSetting> ();
listIterSttngs.Add (iterSttng);

THashSet<byte[]> Auths = new THashSet<byte[]>();
Auths.Add (GetBytes("Public"));

var scanOpts = new ScanOptions();

scanOpts.Authorizations=Auths;
scanOpts.Iterators=listIterSttngs;


try{
    String scannerInstance = client.createScanner(loginToken, tableName, scanOpts);

    var more = true;
    while (more)
    {
        var scan = client.nextK(scannerInstance, 10);
        more = scan.More;

        foreach (var entry in scan.Results)
        {
            artifactList.Add (GetString(entry.Key.Row));
        }
    }

    client.closeScanner(scannerInstance);
}catch(Exception e) {
    Console.WriteLine (e.StackTrace);
}

日志文件中的错误:

2013-12-07 15:28:01,126 [tabletserver.TabletServer] 信息:为范围 1<< 添加 1 个日志作为别名 4 2013-12-07 15:29:36,256 [iterators.IteratorUtil] 错误:java.lang.ClassNotFoundException :RegExFilter.class 2013-12-07 15:29:36,257 [tabletserver.TabletServer] 警告:扫描平板电脑时出现异常 7<< java.io.IOException:java.lang.ClassNotFoundException:org.apache.accumulo 中的 RegExFilter.class。 core.iterators.IteratorUtil.loadIterators(IteratorUtil.java:248) at org.apache.accumulo.core.iterators.IteratorUtil.loadIterators(IteratorUtil.java:213) at org.apache.accumulo.core.iterators.IteratorUtil.loadIterators( IteratorUtil.java:191) 在 org.apache.accumulo.server.tabletserver.Tablet$ScanDataSource.createIterator(Tablet.java:2084) 在 org.apache.accumulo.server.tabletserver.Tablet$ScanDataSource。iterator(Tablet.java:2022) at org.apache.accumulo.core.iterators.system.SourceSwitchingIterator.seek(SourceSwitchingIterator.java:163) at org.apache.accumulo.server.tabletserver.Tablet.nextBatch(Tablet.java: 1737) 在 org.apache.accumulo.server.tabletserver.Tablet.access$3200(Tablet.java:152) 在 org.apache.accumulo.server.tabletserver.Tablet$Scanner.read(Tablet.java:1879) 在 org. apache.accumulo.server.tabletserver.TabletServer$ThriftClientHandler$NextBatchTask.run(TabletServer.java:945) 在 org.apache.accumulo.trace.instrument.TraceRunnable.run(TraceRunnable.java:47) 在 java.util.concurrent。 org.apache.accumulo.trace.instrument.TraceRunnable 中的 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 中的 ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)。run(TraceRunnable.java:47) at org.apache.accumulo.core.util.LoggingRunnable.run(LoggingRunnable.java:34) at java.lang.Thread.run(Thread.java:662) 原因:java.lang .ClassNotFoundException: RegExFilter.class at org.apache.commons.vfs2.impl.VFSClassLoader.findClass(VFSClassLoader.java:175) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass (ClassLoader.java:247) 在 org.apache.accumulo.start.classloader.vfs.AccumuloVFSClassLoader.loadClass(AccumuloVFSClassLoader.java:102) 在 org.apache.accumulo.core.iterators.IteratorUtil.loadIterators(IteratorUtil.java:232 ) ... 15 更多 2013-12-07 15:29:36,260 [thrift.ProcessFunction] 错误:内部错误处理 startScan java.lang.RuntimeException: java.util.concurrent.ExecutionException: java.io.IOException: java.lang .ClassNotFoundException:RegExFilter.class

尝试: 将 RegExFilter.class 保存到 $ACCUMULO_HOME/lib/ext 这没有帮助。

4

1 回答 1

1

Accumulo 需要知道完整的类名才能正确加载它(包括包)。

尝试使用“org.apache.accumulo.core.iterators.user.RegExFilter”而不是“RegExFilter.class”,因为没有具有该名称和包的类。

此外,您不必在 $ACCUMULO_HOME/lib/ext 中添加任何额外的类,因为 org.apache.accumulo.core.iterators.user.RegExFilter 已经包含在 accumulo-core.jar 中并且应该在 $ACCUMULO_HOME/lib

于 2013-12-08T01:08:09.967 回答