wake-up-neo.net

ClassNotFoundException: org.Apache.Hive.jdbc.HiveDriver

Ich bin in Java ziemlich neu. Ich versuche, eine Verbindung zum Hive-Server über Java herzustellen und Beispielcode von https://cwiki.Apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC zu verwenden.

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);
        }
    }
}

Ich habe alle Gläser an den erforderlichen Ort gestellt und die POM-Datei aktualisiert 

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)

Ich habe lange nach einer Lösung gesucht, konnte sie aber nicht lösen. Bitte lassen Sie mich wissen, wie ich das beheben kann. 

8
pam

Dies liegt an einer Nichtübereinstimmung in der hivesever2-Version. Wenn die Hive-Version mehr als 0,13 ist, müssen Sie dies möglicherweise verwenden. 

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

Stellen Sie außerdem sicher, dass Sie dieses Glas in Ihrem Klassenpfad hinzufügen.

10
Aman

Ich gehe davon aus, dass Sie aus dem Stack-Trace, den Sie gepostet haben, durch IntelliJ laufen und diesen Fehler erhalten.

Das POM beschreibt, wie das Projekt erstellt wird, nicht wie das kompilierte Projekt ausgeführt wird. In Ihrer Klasse importieren Sie org.Apache.Hive.jdbc.HiveDriver nicht. Ich stelle mir vor, dass IntelliJ nicht sicherstellen wird, dass die JAR, die diese enthält, an die JVM im Klassenpfad übergeben wird. 

Ich glaube, Sie müssen in diesem Fall das Hive-Glas manuell auf dem Klassenpfad übergeben. Irgendwo in den Projekteinstellungen (NICHT im POM) in Ihrer IDE, wo die Laufzeiteinstellungen sind, müssen Sie den Befehlszeilenschalter cp oder -classpath einschließen, der auf die Hive-JAR verweist. Oder alternativ können Sie, wie David Fernadez sagt, die Klasse importieren, die IntelliJ dazu zwingen soll, den JAR auf den Klassenpfad zu übergeben.

2
Kerry

Sie müssen eine Bibliothek (JAR-Datei) in Ihr Projekt aufnehmen, die die fehlende Klasse org.Apache.Hive.jdbc.HiveDriver enthält. Hier es ist ein Link zu Version 0.8.0 davon.

2
David Fernandez

Ich denke, der Grund ist, dass der Java-Compiler oder die JVM den Klassenpfad nicht wie angenommen liest.

Die Umgebung ist für Anfänger sehr schwierig. Ich werde empfehlen, Cloudera Quickstart VM und Java IDE zu verwenden, um die Schmerzen zu lindern. 

Ich litt viele Stunden und organisierte es in diesem Artikel: http://www.yuchao.us/2017/05/Hive-jdbc-in-cloudera-hadoop.html

0
Yuchao Jiang