2016-03-25 17 views
5

Sono abbastanza nuovo in Java. Sto cercando di connettersi al server tramite alveare Java e codice di esempio utilizzato da https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBCClassNotFoundException: org.apache.hive.jdbc.HiveDriver

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

ho messo tutti i vasetti nella posizione desiderata e aggiornato il file pom, ma ottenere

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) 

ho cercato per una soluzione per un po 'di tempo, ma non poteva risolverlo. Per favore fatemi sapere come risolvere questo problema.

+0

si può piacere come hai fatto a risolvere questo problema? – DharaPPatel

risposta

8

Ciò è dovuto alla mancata corrispondenza nella versione hivesever2. Se la versione di Hive è superiore a 0.13, potrebbe essere necessario utilizzarlo.

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

assicuratevi di aggiungere questo barattolo in voi percorso di classe anche ..

+0

Grazie! Ha funzionato!!! – pam

+1

Dove va? Supponendo che sia un file di configurazione. Qual è il nome del file. – curtisp

+5

puoi per favore indicare dove applicare questo cambiamento? Sto affrontando gli stessi problemi – DharaPPatel

2

È necessario includere una libreria nel progetto (file JAR) che include quella classe mancante org.apache.hive.jdbc.HiveDriver. Here è un collegamento alla versione 0.8.0 di esso.

+0

Ho hive-jdbc-0.9.0 in posizione. – pam

+0

stai usando eclissi? ti sei assicurato che il 'jar' si trovi sul classpath? come stai includendolo nel tuo progetto? Prova a creare una riga nel tuo file come 'HiveDriver h;' e prova ad importarlo e compilarlo in modo da controllare se lo hai collegato correttamente. –

2

Dalla traccia di stack che hai postato presumo che tu stia eseguendo questo tramite IntelliJ e ottenendo questo errore.

Il POM descrive come costruire il progetto non come eseguire il progetto compilato. Nella tua classe non importa org.apache.hive.jdbc.HiveDriver quindi immagino che IntelliJ non garantisca che il suo JAR contenente sia passato alla JVM sul classpath.

Ciò che ritengo necessario fare in questo caso è passare manualmente la posizione del barattolo alveare sul classpath. Da qualche parte nelle impostazioni del progetto (NON il POM) nel tuo IDE, dove saranno le impostazioni di runtime, dovrai includere lo switch della riga di comando cp o -classpath che punterà all'alveare JAR. O in alternativa puoi fare come dice David Fernadez e importare la classe che dovrebbe forzare IntelliJ a passare il JAR sul classpath.

+0

Grazie. Sono stato via per un po 'di tempo. Ho provato tutte e tre le risposte e la soluzione di Aman ha risolto il problema. @ David – pam

0

Credo che la ragione è che il Java compilatore o JVM non legge classpath come supposto.

L'ambiente è davvero difficile per i principianti. Ti suggerirò di usare Cloudera quickstart VM e Java IDE per alleviare il dolore.

ho sofferto molte ore ed organizzato in questo articolo: http://www.yuchao.us/2017/05/hive-jdbc-in-cloudera-hadoop.html