HBase - Java中的java.lang.NoClassDefFoundError [英] HBase - java.lang.NoClassDefFoundError in java
问题描述
我只是想用Java与Hbase交互
import org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.hbase。*;
import org.apache.hadoop.hbase.client。*;
import org.apache.hadoop.hbase.util。*;
导入org.apache.hadoop.hbase.HBaseConfiguration;
$ b $ public class TestHBase {
public static void main(String [] args)throws Exception {
Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);
尝试{
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();
$ / code $ / pre
$ b $ p 以上是我的程序和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
线程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)
导致:java.lang.ClassNotFoundException:org.apache.hadoop.hbase.HBaseConfig
at java .net.URLClassLoader 1.run $(URL ClassLoader.java:202)在java.security.AccessController.doPrivileged处使用
(本地方法)在java.net.URLClassLoader.findClass处使用
(URLClassLoader.java:190)$ b $在java.lang。 ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 6 more
任何人都可以帮助我
谢谢
它应该是一个标准的jar程序运行风格,如:
java -jar yourjar .jar
当你使用> jar -cvf TestHBase.jar -C TestHBase /,它不保证在运行时可以找到jar的依赖关系,这是你面对的。
在Eclipse中,jar导出函数可以选择Runablejar。
因此,建议您单独运行测试类并明确指出依赖jar。 >
Im just trying to interact with Hbase using Java
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();
}
}
}
Above is my program and My TestHBase folder contains the following items
hbase-0.94.6.1.3.0.0-0380.jar
TestHBase.class
And i have created jar using the following code
java>jar -cvf TestHBase.jar -C TestHBase/ .
And i have run my jar using the following code
Hadoop> Hadoop jar C:\java\bin\TestHBase.jar com.bgt.TestHBase
But im getting the following error
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
Can anyone help me
Thanks
解决方案 It's Hbase client Java Program, you should not run it with "hadoop".
It's should be a standard jar program running style, like:
java -jar yourjar.jar
When you use ">jar -cvf TestHBase.jar -C TestHBase/ .", it doesn't garantee the jar dependencies can be found during runtime, which you face it.
In eclipse, the jar export function has a choice of "Runable" jar.
So suggest you run your testing class seprately with explicitly point out the dependent jar.
这篇关于HBase - Java中的java.lang.NoClassDefFoundError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!