HBase – java中的java.lang.NoClassDefFoundError

我只是想尝试使用Java与Hbase进行交互

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.*; import org.apache.hadoop.hbase.HBaseConfiguration; public class TestHBase { public static void main(String[] args) throws Exception { Configuration conf = HBaseConfiguration.create(); HBaseAdmin admin = new HBaseAdmin(conf); try { HTable table = new HTable(conf, "test-table"); Put put = new Put(Bytes.toBytes("test-key")); put.add(Bytes.toBytes("cf"), Bytes.toBytes("q"), Bytes.toBytes("value")); table.put(put); } finally { admin.close(); } } } 

以上是我的程序,My TestHBase文件夹包含以下项目

 hbase-0.94.6.1.3.0.0-0380.jar TestHBase.class 

我使用以下代码创建了jar

 java>jar -cvf TestHBase.jar -C TestHBase/ . 

我使用以下代码运行我的jar

 Hadoop> Hadoop jar C:\java\bin\TestHBase.jar com.bgt.TestHBase 

但我得到以下错误

 C:\HDP>hadoop jar C:\java\jdk1.6.0_31\bin\zip.jar com.bgt.TestHBase Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hba se/HBaseConfiguration at com.bgt.TestHBase.main(TestHBase.java:12) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.util.RunJar.main(RunJar.java:160) Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfig uration at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 6 more 

谁能帮我

谢谢

它是Hbase客户端Java程序,您不应该使用“hadoop”运行它。 它应该是一个标准的jar程序运行样式,如:java -jar yourjar .jar

当您使用“> jar -cvf TestHBase.jar -C TestHBase /。”时,它并不保证可以在运行时找到jar依赖项,您可以在其中找到它。

在eclipse中,jar导出函数可以选择“Runable”jar。

因此,建议您分别运行测试类,并明确指出依赖jar。