accumulo-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christopher Tubbs (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (ACCUMULO-2911) setscaniter and setshelliter unable to load class.
Date Thu, 04 Sep 2014 23:09:23 GMT

    [ https://issues.apache.org/jira/browse/ACCUMULO-2911?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14122147#comment-14122147
] 

Christopher Tubbs commented on ACCUMULO-2911:
---------------------------------------------

I would not depend on the shell's table contexts to provide significant behavioral differences
(such as using the table's context classloader or not). The use of the current table context
in the shell is limited in value, and really only allows somebody to omit the "-t tableName"
from a command. It is implemented inconsistently, and I question it's underlying utility in
the first place, especially now that we have namespaces, which might offer a more useful application
for shell contexts. I think it'd be very unexpected if there were substantial differences
in the way a command behaved which depended on the context. That'd be confusing and unexpected,
especially when scripting the shell, where you don't actually have live interaction with the
shell's table contexts.

> setscaniter and setshelliter unable to load class.
> --------------------------------------------------
>
>                 Key: ACCUMULO-2911
>                 URL: https://issues.apache.org/jira/browse/ACCUMULO-2911
>             Project: Accumulo
>          Issue Type: Bug
>    Affects Versions: 1.5.0
>            Reporter: David Medinets
>            Priority: Trivial
>
> Problem:
> I can use a custom iterator using the setiter command but the same iterator does not
work using the setscaniter or setshelliter commands.
> References:
>   https://blogs.apache.org/accumulo/entry/the_accumulo_classloader
>   http://accumulo.apache.org/1.5/examples/classpath.html
> Description:
> I am using my https://github.com/medined/D4M_Schema project to start Accumulo. So the
environment that I am using can be duplicated exactly if needed. I am using
> Accumulo: 1.5.0
> Hadoop: 1.2.1
> The classpath settings in accumulo-site.xml are the following (which I think are the
default):
>     <property>
>       <name>general.classpaths</name>
>       <value>
>     $ACCUMULO_HOME/server/target/classes/,
>     $ACCUMULO_HOME/core/target/classes/,
>     $ACCUMULO_HOME/start/target/classes/,
>     $ACCUMULO_HOME/examples/target/classes/,
>         $ACCUMULO_HOME/lib/[^.].$ACCUMULO_VERSION.jar,
>         $ACCUMULO_HOME/lib/[^.].*.jar,
>         $ZOOKEEPER_HOME/zookeeper[^.].*.jar,
>         $HADOOP_HOME/conf,
>         $HADOOP_HOME/[^.].*.jar,
>         $HADOOP_HOME/lib/[^.].*.jar,
>       </value>
>       <description>Classpaths that accumulo checks for updates and class files.
>       When using the Security Manager, please remove the ".../target/classes/" values.
>       </description>
>     </property>
> I can load my iterator using setiter but not with setscaniter or setshelliter.
> Here is my do-nothing iterator:
> public class MyIterator extends WrappingIterator implements OptionDescriber {
>     @Override
>     public IteratorOptions describeOptions() {
>         String name = "dummy";
>         String description = "Dummy Description";
>         Map<String, String> namedOptions = new HashMap<String, String>();
>         List<String> unnamedOptionDescriptions = null;
>         return new IteratorOptions(name, description, namedOptions, unnamedOptionDescriptions);
>     }
>     @Override
>     public boolean validateOptions(Map<String, String> options) {
>         return true;
>     }
>     
> }
> I copy the jar file out to HDFS:
> hadoop fs -mkdir /user/vagrant/d4m/classpath
> hadoop fs -put /vagrant/schema/target/d4m_schema-0.0.1-SNAPSHOT.jar /user/vagrant/classpath
> I set the table-specific classpath context:
> createtable atest
> table atest
> insert row cf cq value
> config -s general.vfs.context.classpath.d4m=hdfs://affy-master:9000/user/vagrant/classpath
> config -t atest -s table.classpath.context=d4m
> Now I can configure the iterator and scan over the single row without a problem:
> setiter -n MyIterator -p 10 -scan -minc -majc -class com.codebits.d4m.iterator.MyIterator
> scan
> deleteiter -n MyIterator -scan -minc -majc 
> However, the setscaniter commands fails:
> root@instance atest> setscaniter -n MyIterator -p 10 -class com.codebits.d4m.iterator.MyIterator
> 2014-06-15 02:54:14,098 [shell.Shell] WARN : Deprecated, use setshelliter
> Dummy Description
> 2014-06-15 02:54:14,126 [shell.Shell] ERROR: org.apache.accumulo.core.util.shell.ShellCommandException:
Command could not be initialized (Unable to load com.codebits.d4m.iterator.MyIterator)
> As does the setshelliter:
> root@instance atest> setshelliter -pn d4m -n MyIterator -p 10 -class com.codebits.d4m.iterator.MyIterator
> Dummy Description
> 2014-06-15 02:55:07,025 [shell.Shell] ERROR: org.apache.accumulo.core.util.shell.ShellCommandException:
Command could not be initialized (Unable to load com.codebits.d4m.iterator.MyIterator)
> I don't see any messages in the log files. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message