복붙노트

[HADOOP] ClassNotFoundException : org.apache.hive.jdbc.HiveDriver

HADOOP

ClassNotFoundException : org.apache.hive.jdbc.HiveDriver

나는 Java를 처음 접했습니다. java를 통해 하이브 서버에 연결하려고하고 https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC에서 샘플 코드를 사용하려고합니다.

import java.sql.SQLException;

public class HiveJdbcClient {
    //private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    public static void main(String[] args) throws SQLException {
        try {
            Class.forName("org.apache.hive.jdbc.HiveDriver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.exit(1);
        }
    }
}

필요한 위치에 모든 병을 놓고 pom 파일을 업데이트했지만 점점

java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at HiveJdbcClient.main(HiveJdbcClient.java:7)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

나는 꽤 오랫동안 해결책을 찾았지만 그것을 해결할 수 없었다. 이 문제를 해결하는 방법을 알려주십시오.

해결법

  1. ==============================

    1.이것은 hivesever2 버전의 불일치 때문입니다. Hive 버전이 0.13 이상인 경우이 값을 사용해야 할 수 있습니다.

    이것은 hivesever2 버전의 불일치 때문입니다. Hive 버전이 0.13 이상인 경우이 값을 사용해야 할 수 있습니다.

    <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-jdbc</artifactId>
                <version>1.1.0</version>
    </dependency>
    

    또한이 항아리를 클래스 경로에 추가해야합니다.

  2. ==============================

    2.누락 된 클래스 org.apache.hive.jdbc.HiveDriver를 포함하는 라이브러리 (JAR 파일)를 프로젝트에 포함해야합니다. 여기에서는 버전 0.8.0에 대한 링크입니다.

    누락 된 클래스 org.apache.hive.jdbc.HiveDriver를 포함하는 라이브러리 (JAR 파일)를 프로젝트에 포함해야합니다. 여기에서는 버전 0.8.0에 대한 링크입니다.

  3. ==============================

    3.게시 한 스택 추적에서 IntelliJ를 통해이 오류를 실행한다고 가정합니다.

    게시 한 스택 추적에서 IntelliJ를 통해이 오류를 실행한다고 가정합니다.

    POM은 컴파일 된 프로젝트를 실행하는 방법이 아닌 프로젝트를 빌드하는 방법을 설명합니다. 클래스에서 org.apache.hive.jdbc.HiveDriver를 가져 오지 않으므로 IntelliJ가 포함 JAR이 클래스 경로의 JVM으로 전달되는지 확인할 수 없다고 상상해보십시오.

    이 경우에해야 할 일은 클래스 패스에있는 하이브 항아리의 위치를 ​​수동으로 전달하는 것입니다. 런타임 설정이 될 IDE의 프로젝트 설정 (POM이 아님)의 어디에서 하이브 JAR을 가리키는 cp 또는 -classpath 명령 줄 스위치를 포함시켜야합니다. 또는 David Fernadez가 IntelliJ가 클래스 패스에서 JAR을 전달하도록 강제하는 클래스를 가져 와서 가져올 수 있습니다.

  4. ==============================

    4.이유는 Java 컴파일러 또는 JVM이 클래스 패스를 읽지 않는다는 것입니다.

    이유는 Java 컴파일러 또는 JVM이 클래스 패스를 읽지 않는다는 것입니다.

    환경 설정은 초보자에게는 정말 어렵습니다. 고통을 덜어주기 위해 Cloudera quickstart VM 및 Java IDE를 사용하는 것이 좋습니다.

    나는이 기사에서 많은 시간을 겪고 그것을 구성했다 : http://www.yuchao.us/2017/05/hive-jdbc-in-cloudera-hadoop.html

  5. from https://stackoverflow.com/questions/36212092/classnotfoundexception-org-apache-hive-jdbc-hivedriver by cc-by-sa and MIT license