Hrushi
Hrushi

Reputation: 153

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

We are trying to execute basic Hbase example on hortonworks sandbox (2.3).

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.

/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.

Upvotes: 2

Views: 4080

Answers (3)

Brijan Elwadhi
Brijan Elwadhi

Reputation: 450

Instead of manually adding jars into classpath you can directly use below command. $(hbase classpath) recursively search in hortonworks hadoop folders and finds the required jars from sandbox.

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

Upvotes: 2

Rahul Sharma
Rahul Sharma

Reputation: 5834

When I face NoClassDefFoundError error with mapreduce, I add jar using one of the jar class in JobBuilder to resolve it.
e.g.
Job job = new Job(conf); job.setJarByClass(org.apache.hadoop.hbase.util.Bytes.class);

Supply jars using libjars parameter to your job- 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}

you can also add jar to HADOOP_CLASSPATH variable before launch job.

Upvotes: 1

chrisA
chrisA

Reputation: 117

Is all the latest code included in the 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. Also check that the necessary import statements are present in the Java class.

Upvotes: -2

Related Questions