2013-12-06 5 views
2

Im просто пытается взаимодействовать с Hbase использованием JavaHBase - java.lang.NoClassDefFoundError в 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(); 
      } 
     } 
    } 

Выше моя программа и моя TestHBase папка содержит следующие пункты

hbase-0.94.6.1.3.0.0-0380.jar 
TestHBase.class 

И я создал банку, используя следующий код

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

И я побежал мой банку, используя следующий код

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 

Может кто-нибудь помочь мне

Благодаря

+1

Вам нужно добавить JAR-файл HBase к вызову 'hadoop jar'. IIRC, вам нужно будет вызывать как 'hasoop jar ... -l <список разделенных запятыми JAR-файлов>' – SuperSaiyan

+0

, но я создал TestHBase.jar, включая HBase.jar. Я указал его в своем вопросе – Backtrack

ответ

1

Это Hbase клиент Java программа, вы не должны запускать его с помощью «hadoop». Это должно быть стандартной баночка программы стиля бега, как: Java -jar yourjar .jar

При использовании "> баночка -cvf TestHBase.jar -C TestHBase /.", Это не гарантия jar зависимости могут быть найдены во время выполнения, с которыми вы сталкиваетесь.

В eclipse функция экспорта jar имеет выбор «Runable» jar.

Так что предлагайте вам провести свой тестовый класс отдельно, указав явно зависимую банку.

Смежные вопросы