Hbase示例,线程“main”java.lang.NoClassDefFoundError中的异常

时间:2015-10-29 13:19:15

标签: java hadoop hbase hortonworks-data-platform

我们正在尝试在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 个答案:

答案 0 :(得分:2)

您可以直接使用以下命令,而不是手动将jar添加到类路径中。 $(hbase classpath)以递归方式搜索hortonworks hadoop文件夹,并从沙箱中找到所需的jar。

HADOOP_CLASSPATH=$(hbase classpath):/usr/hdp/2.3.0.0-2557/hbase/conf hadoop jar /usr/hdp/2.3.0.0-2557/hbase/lib/hbase-examples.jar org.apache.hadoop.hbase.mapreduce.IndexBuilder

答案 1 :(得分:1)

当我使用mapreduce面对NoClassDefFoundError错误时,我使用JobBuilder中的一个jar类来添加jar来解决它。
例如
Job job = new Job(conf); job.setJarByClass(org.apache.hadoop.hbase.util.Bytes.class);

使用libjars参数为您的工作提供罐子 - e.g。

LIB=hbase-x.x.x.jar
hadoop jar /usr/hdp/2.3.0.0-2557/hbase/lib/hbase-examples.jar org.apache.hadoop.hbase.mapreduce.IndexBuilder -libjars ${LIB}

您还可以在启动作业之前将jar添加到HADOOP_CLASSPATH变量。

答案 2 :(得分:-2)

jar中是否包含所有最新代码?使用java反编译器(如jd-gui)查看jar文件,以确保您引用的这个类实际存在。还要检查Java类中是否存在必要的import语句。