java - ClassNotFoundException: org.apache.hive.jdbc.HiveDriver




maven hadoop (3)

À partir de la trace de la pile que vous avez publiée, je suppose que vous utilisez IntelliJ et que vous obtenez cette erreur.

Le POM décrit comment construire le projet et non comment exécuter le projet compilé. Dans votre classe, vous n'importerez pas org.apache.hive.jdbc.HiveDriver donc j'imagine qu'IntelliJ ne va pas s'assurer que son JAR contenant est transmis à la JVM sur le chemin de classe.

Ce que je crois que vous devez faire dans ce cas est de passer manuellement à l'emplacement du pot de la ruche sur le chemin de classe. Quelque part dans les paramètres du projet (PAS le POM) dans votre IDE où seront les paramètres d'exécution, vous devrez inclure le commutateur de ligne de commande cp ou -classpath qui pointera vers le JAR de la ruche. Ou bien vous pouvez faire comme David Fernadez dit et importer la classe qui devrait forcer IntelliJ à passer le JAR dans le classpath.

Je suis assez nouveau à Java. J'essaye de me connecter au serveur de ruche par l'intermédiaire de Java et ai utilisé l'exemple de code de 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);
        }
    }
}

J'ai placé tous les pots dans l'emplacement requis et mis à jour le fichier pom, mais en obtenant

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)

J'ai cherché une solution pendant un certain temps, mais je n'ai pas pu la résoudre. S'il vous plaît laissez-moi savoir comment résoudre ce problème.


Cela est dû à une incompatibilité dans la version hivesever2. Si la version Hive est supérieure à 0.13, vous devrez peut-être l'utiliser.

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

Assurez-vous également d'ajouter ce pot dans votre chemin de classe.


Vous devez inclure une bibliothèque dans votre projet (fichier JAR) qui inclut cette classe manquante org.apache.hive.jdbc.HiveDriver . Voici un lien vers la version 0.8.0 de celui-ci.