web-dev-qa-db-ja.com

ClassNotFoundException:org.Apache.Hive.jdbc.HiveDriver

私はJavaにかなり慣れています。 Javaと https://cwiki.Apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clientsからのサンプルコードを使用して)を介してHiveサーバーに接続しようとしています-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);
        }
    }
}

すべてのjarを必要な場所に配置し、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)

しばらくの間、解決策を探しましたが、解決できませんでした。これを修正する方法を教えてください。

10
pam

これはhivesever2バージョンの不一致が原因です。Hiveのバージョンが0.13を超える場合は、これを使用する必要があります。

<dependency>
            <groupId>org.Apache.Hive</groupId>
            <artifactId>Hive-jdbc</artifactId>
            <version>1.1.0</version>
</dependency>

また、このjarをクラスパスに追加してください。

10
Aman

あなたが投稿したスタックトレースから、IntelliJを介してこれを実行していて、このエラーが発生していると想定しています。

POMは、コンパイルされたプロジェクトを実行する方法ではなく、プロジェクトをビルドする方法を記述します。あなたのクラスではorg.Apache.Hive.jdbc.HiveDriverをインポートしないので、IntelliJはそれを含むJARがクラスパスでJVMに渡されることを保証しないと思います。

この場合は、クラスパス上のHive jarの場所を手動で渡す必要があると思います。 IDEのプロジェクト設定(POMではない)のどこかにランタイム設定があります。cpまたは-classpathコマンドラインスイッチを含める必要があります。または、David Fernadezが言うようにして、IntelliJにJARをクラスパスに渡すように強制するクラスをインポートすることもできます。

2
Kerry

不足しているクラスorg.Apache.Hive.jdbc.HiveDriverを含むライブラリをプロジェクト(JARファイル)に含める必要があります。 ここ バージョン0.8.0へのリンクです。

2
David Fernandez

JavaコンパイラまたはJVMがクラスパスを想定どおりに読み取らないことが理由だと思います

初心者にとって環境設定は本当に難しいです。 Clouderaクイックスタートを使用することをお勧めしますVMおよびJava IDE.

私は何時間も苦しんで、この記事で整理しました: http://www.yuchao.us/2017/05/Hive-jdbc-in-cloudera-hadoop.html

0
Yuchao Jiang