Make sure that the class is available to the the tserver process. This is done by putting the jar containing your class on all nodes under the $ACCUMULO_HOME/lib/ext directory. If you put it under lib/ext, then you won't need to stop and restart the process for the tserver to pick it up.
On Tue, Oct 23, 2012 at 10:15 AM, Eric Newton <[email protected]> wrote: > Check the tablet server logs... you'll see the real problem using the > filter in there. > > -Eric > > > On Tue, Oct 23, 2012 at 9:54 AM, Victoria Bare > <[email protected]>wrote: > >> Hello, >> >> I am currently using Accumulo 1.3 to implement a Filter. Since I'm using >> 1.3, I realize that the Filter class is not an iterator so I have created a >> MyFilter class that implements Filter to use when I initialize my Scanner. >> When I run my code, I am getting an AccumuloServerException. >> >> I was referencing the posts from December 2011 on "Filter Use" to >> initialize my scanner with MyFilter. >> My scanner initialization currently appears as so: >> >> Instance zooInstance = new ZooKeeperInstance(*instanceName*, *zooServers* >> ); >> Connector connector = zooInstance.getConnector(*userName*, *password*); >> Authorizations authorizations = new Authorizations(); >> Scanner scanner = connector.createScanner(*tableName*, authorizations); >> >> scanner.setRange(*range*); >> >> scanner.setScanIterators(1, >> "org.apache.accumulo.core.iterators.FilteringIterator", "myFilter"); >> scanner.setScanIteratorOption("myFilter", "0", "test.offsets.MyFilter"); >> scanner.setScanIteratorOption("myFilter", "0.start", *start*); >> >> Iterator<Entry<Key,Value>> iterator = scanner.iterator(); >> >> while(iterator.hasNext()) { <--- Exception here >> >> ... >> >> } >> >> >> ------------------------------------------------------------------------------------------------------------------------- >> >> public class MyFilter implements Filter{ >> long startOfRange = 0; >> @Override >> public boolean accept(Key key, Value value) { >> String colqual = key.getColumnQualifier().toString(); >> long end = Long.parseLong(colqual.substring(20, 39)); >> if(end < startOfRange){ >> return false; >> } >> return true; >> } >> >> @Override >> public void init(Map<String, String> options) { >> >> if(options == null){ >> throw new IllegalArgumentException("'start' must be set for filter"); >> } >> String start = options.get("start"); >> if(start == null){ >> throw new IllegalArgumentException("'start' must be set for filter"); >> } >> startOfRange = Long.parseLong(start); >> } >> >> } >> >> >> ------------------------------------------------------------------------------------------------------------------------- >> >> The Exception that I'm receiving is: >> >> Exception in thread "main" java.lang.RuntimeException: >> org.apache.accumulo.core.client.impl.AccumuloServerException: >> at >> org.apache.accumulo.core.client.impl.ScannerIterator.hasNext(ScannerIterator.java) >> at test.offsets.TestFilter.getFilterEntrySetRange(TestFilter.java) >> at >> test.offsets.TestFilter.getAnalysisProductsByClassFilteredOffset(TestFilter.java) >> at test.offsets.TestFilter.main(TestFilter.java) >> >> >> ------------------------------------------------------------------------------------------------------------------------- >> >> I was thinking that maybe the server couldn't find the MyFilter class, or >> maybe it was a permissions error, but I wasn't sure. When I initialize my >> Scanner to use MyFilter, is it looking on the server for the file or in my >> project? >> >> Any assistance you can provide would be greatly appreciated, thanks! >> Tori >> > >
