简体   繁体   English

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

[英]Hbase example, Exception in thread "main" java.lang.NoClassDefFoundError

We are trying to execute basic Hbase example on hortonworks sandbox (2.3).我们正在尝试在 hortonworks 沙箱 (2.3) 上执行基本的 Hbase 示例。

hadoop jar /usr/hdp/2.3.0.0-2557/hbase/lib/hbase-examples.jar org.apache.hadoop.hbase.mapreduce.IndexBuilder

We are getting below exception after executing this program.执行此程序后,我们遇到了以下异常。

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 

Based on this error we tried to set the Hadoop classpath in Hbase-env.sh.基于此错误,我们尝试在 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

But still getting the same error.但仍然得到同样的错误。

Instead of manually adding jars into classpath you can directly use below command.您可以直接使用下面的命令,而不是手动将 jar 添加到类路径中。 $(hbase classpath) recursively search in hortonworks hadoop folders and finds the required jars from sandbox. $(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

When I face NoClassDefFoundError error with mapreduce, I add jar using one of the jar class in JobBuilder to resolve it.当我使用 mapreduce 遇到 NoClassDefFoundError 错误时,我使用 JobBuilder 中的 jar 类之一添加 jar 来解决它。
eg例如
Job job = new Job(conf); job.setJarByClass(org.apache.hadoop.hbase.util.Bytes.class);

Supply jars using libjars parameter to your job- eg使用 libjars 参数为您的工作提供 jar-例如

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}

you can also add jar to HADOOP_CLASSPATH variable before launch job.您还可以在启动作业之前将 jar 添加到 HADOOP_CLASSPATH 变量。

Is all the latest code included in the jar? jar 中是否包含所有最新代码? Use a java decompiler such as jd-gui to look inside the jar file to make sure this class you are referencing is actually there.使用 java 反编译器(例如 jd-gui)查看 jar 文件内部,以确保您引用的这个类确实存在。 Also check that the necessary import statements are present in the Java class.还要检查 Java 类中是否存在必要的导入语句。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM