私は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)
しばらくの間、解決策を探しましたが、解決できませんでした。これを修正する方法を教えてください。
これはhivesever2バージョンの不一致が原因です。Hiveのバージョンが0.13を超える場合は、これを使用する必要があります。
<dependency>
<groupId>org.Apache.Hive</groupId>
<artifactId>Hive-jdbc</artifactId>
<version>1.1.0</version>
</dependency>
また、このjarをクラスパスに追加してください。
あなたが投稿したスタックトレースから、IntelliJを介してこれを実行していて、このエラーが発生していると想定しています。
POMは、コンパイルされたプロジェクトを実行する方法ではなく、プロジェクトをビルドする方法を記述します。あなたのクラスではorg.Apache.Hive.jdbc.HiveDriver
をインポートしないので、IntelliJはそれを含むJARがクラスパスでJVMに渡されることを保証しないと思います。
この場合は、クラスパス上のHive jarの場所を手動で渡す必要があると思います。 IDEのプロジェクト設定(POMではない)のどこかにランタイム設定があります。cp
または-classpath
コマンドラインスイッチを含める必要があります。または、David Fernadezが言うようにして、IntelliJにJARをクラスパスに渡すように強制するクラスをインポートすることもできます。
不足しているクラスorg.Apache.Hive.jdbc.HiveDriver
を含むライブラリをプロジェクト(JARファイル)に含める必要があります。 ここ バージョン0.8.0へのリンクです。
JavaコンパイラまたはJVMがクラスパスを想定どおりに読み取らないことが理由だと思います
初心者にとって環境設定は本当に難しいです。 Clouderaクイックスタートを使用することをお勧めしますVMおよびJava IDE.
私は何時間も苦しんで、この記事で整理しました: http://www.yuchao.us/2017/05/Hive-jdbc-in-cloudera-hadoop.html