복붙노트

[HADOOP] HBase - java의 java.lang.NoClassDefFoundError

HADOOP

HBase - java의 java.lang.NoClassDefFoundError

그냥 Java를 사용하여 Hbase와 상호 작용하려는 Im

    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

그리고 난 다음 코드를 사용하여 항아리를 만들었습니다.

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

    1.Hbase 클라이언트 Java 프로그램이므로 "hadoop"을 사용하여 실행하면 안됩니다. 그것은 표준 항아리 프로그램 실행 스타일이어야합니다 : java -jar yourjar.jar

    Hbase 클라이언트 Java 프로그램이므로 "hadoop"을 사용하여 실행하면 안됩니다. 그것은 표준 항아리 프로그램 실행 스타일이어야합니다 : java -jar yourjar.jar

    "> jar -cvf Test HBase.jar -C TestBase /."를 사용하면, 런타임시 jar 종속성을 찾을 수 있다고 보장하지 않습니다.

    이클립스에서 jar 내보내기 함수는 "Runnable"jar를 선택할 수 있습니다.

    따라서 종속 항아리를 명시 적으로 지적하여 테스트 클래스를 실행하는 것이 좋습니다.

  2. from https://stackoverflow.com/questions/20425219/hbase-java-lang-noclassdeffounderror-in-java by cc-by-sa and MIT license