我们尝试在hortonworks沙盒(2.3)上执行基本的hbase示例。
hadoop jar /usr/hdp/2.3.0.0-2557/hbase/lib/hbase-examples.jar org.apache.hadoop.hbase.mapreduce.IndexBuilder
执行这个程序后,我们得到了以下异常。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/util/Bytes
at org.apache.hadoop.hbase.mapreduce.IndexBuilder.<clinit>(IndexBuilder.java:67)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:278)
at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.util.Bytes
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 5 more
基于此错误,我们尝试在hbase-env.sh中设置hadoop类路径。
/usr/hdp/2.3.0.0-2557/hbase/lib/hbase-client-1.1.1.2.3.0.0-2557.jar:/usr/hdp/2.3.0.0-2557/hbase/lib/hbase-common-1.1.1.2.3.0.0-2557.jar:/usr/hdp/2.3.0.0-2557/hbase/lib/protobuf-java-2.5.0.jar:/usr/hdp/2.3.0.0-2557/hbase/lib/guava-12.0.1.jar:$/usr/hdp/2.3.0.0-2557/hbase/lib/zookeeper.jar:/usr/hdp/2.3.0.0-2557/hbase/lib/hbase-protocol-1.1.1.2.3.0.0-2557.jar:/usr/hdp/2.3.0.0-2557/hbase/lib/commons-configuration-1.6.jar:/usr/hdp/2.3.0.0-2557/hbase/lib/hadoop-common.jar:/usr/hdp/2.3.0.0-2557/hbase/lib/hbase-0.94.27.jar
但仍然得到同样的错误。
3条答案
按热度按时间kupeojn61#
jar中是否包含所有最新的代码?使用jdgui之类的java反编译器查看jar文件,以确保您所引用的类确实存在。还要检查java类中是否存在必要的import语句。
wfveoks02#
您可以直接使用下面的命令,而不是手动将jar添加到类路径中$(hbase classpath)在hortonworks hadoop文件夹中递归搜索,并从sandbox中找到所需的jar。
bf1o4zei3#
当我在mapreduce中遇到noclassdeffounderror错误时,我使用jobbuilder中的一个jar类添加jar来解决它。
例如
Job job = new Job(conf); job.setJarByClass(org.apache.hadoop.hbase.util.Bytes.class);
在作业中使用libjars参数提供jar-例如。您还可以在启动作业之前将jar添加到hadoop\u classpath变量中。