web-dev-qa-db-fra.com

ClassNotFoundException: org.Apache.Hive.jdbc.HiveDriver

Je suis assez nouveau pour Java. J'essaie de me connecter au serveur Hive via Java et d'utiliser un exemple de code provenant 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 à l'emplacement requis et mis à jour le fichier pom, mais 

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 ne pouvais pas le résoudre. S'il vous plaît laissez-moi savoir comment résoudre ce problème. 

8
pam

Cela est dû à une discordance dans la version de hivesever2. Si la version de 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 que vous ajoutez ce fichier dans votre chemin de classe.

10
Aman

À partir de la trace de pile que vous avez postée, je suppose que vous exécutez ceci via IntelliJ et obtenez cette erreur.

Le POM décrit comment construire le projet et non comment exécuter le projet compilé. Dans votre classe, vous n’importez pas org.Apache.Hive.jdbc.HiveDriver. J’imagine donc qu'IntelliJ ne va pas s’assurer que le fichier JAR qui le contient est transmis à la machine virtuelle Java sur le chemin de classe. 

Ce que je crois que vous devez faire dans ce cas est de passer manuellement à l’emplacement du fichier jarre Hive sur le classpath. 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 cp ou -classpath qui pointera vers le fichier JAR Hive. Ou bien vous pouvez faire ce que dit David Fernadez et importer la classe qui devrait forcer IntelliJ à transmettre le fichier JAR dans le chemin de classe.

2
Kerry

Vous devez inclure une bibliothèque dans votre projet (fichier JAR) contenant la classe manquante org.Apache.Hive.jdbc.HiveDriver. Ici il s'agit d'un lien vers la version 0.8.0 de celui-ci.

2
David Fernandez

Je suppose que la raison en est que le compilateur Java ou la JVM ne lit pas classpath comme supposé.

L'environnement est vraiment difficile pour les débutants. Je recommanderai d'utiliser Cloudera quickstart VM et Java IDE pour alléger le problème. 

J'ai souffert de nombreuses heures et l'ai organisé dans cet article: http://www.yuchao.us/2017/05/Hive-jdbc-in-cloudera-hadoop.html

0
Yuchao Jiang