2016-03-25 20 views
5

Jestem całkiem nowy w Javie. Próbuję połączyć się z serwerem poprzez hive Java i używany przykładowy kod z 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); 
     } 
    } 
} 

umieściłem wszystkie słoiki w wymaganym miejscu i aktualizowany plik POM, ale coraz

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) 

Szukałam na rozwiązanie od dłuższego czasu, ale nie mógł go rozwiązać. Daj mi znać, jak to naprawić.

+0

można proszę skąd można rozwiązać ten problem? – DharaPPatel

Odpowiedz

8

Jest to spowodowane niedopasowaniem w wersji hivesever2. Jeśli wersja Hive jest większa niż 0.13, być może będziesz musiał użyć tego.

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

także upewnić się, że dodatek ten słoik w ścieżce klasy ciebie ..

+0

Dziękujemy! Zadziałało!!! – pam

+1

Gdzie to się dzieje? Zakładając, że jest to plik konfiguracyjny. Co to jest nazwa pliku. – curtisp

+5

Czy możesz wymienić miejsce zastosowania tej zmiany? Mam do czynienia z tymi samymi problemami – DharaPPatel

2

Musisz dołączyć bibliotekę do projektu (plik JAR), który zawiera tę brakującą klasę org.apache.hive.jdbc.HiveDriver. Here jest to link do wersji 0.8.0 tego.

+0

Mam hive-jdbc-0.9.0 na miejscu. – pam

+0

Czy używasz Zaćmienie? czy upewniłeś się, że 'jar' jest w twojej ścieżce klasowej? w jaki sposób włączasz go do swojego projektu? Spróbuj utworzyć linię w pliku, np. 'HiveDriver h;' i spróbuj ją zaimportować i skompilować, abyś mógł sprawdzić, czy jest ona poprawnie podłączona. –

2

Z opublikowanego śladu stosuję, zakładając, że uruchamiasz to przez IntelliJ i otrzymujesz ten błąd.

POM opisuje, jak zbudować projekt, a nie jak wykonać skompilowany projekt. W twojej klasie nie importujesz org.apache.hive.jdbc.HiveDriver, więc wyobrażam sobie, że IntelliJ nie zapewni, że jego zawierający JAR zostanie przekazany do JVM w ścieżce klas.

Uważam, że w tym przypadku musisz ręcznie przekazać lokalizację słoju ula na ścieżce klas. Gdzieś w ustawieniach projektu (NIE POM) w twoim IDE, gdzie będą ustawienia środowiska wykonawczego, będziesz musiał włączyć przełącznik linii komend cp lub -classpath, który wskaże JAR w ulu. Lub możesz zrobić tak, jak mówi David Fernadez i zaimportować klasę, która powinna zmusić IntelliJ do przekazania JARa na ścieżce klas.

+0

Dziękuję. Nie było mnie przez jakiś czas. Wypróbowałem wszystkie trzy odpowiedzi, a rozwiązanie Aman rozwiązało problem. @David – pam

0

Myślę, że powodem jest to, że kompilator Java lub JVM nie czyta ścieżkę klasy jak przypuszczano.

Ustawienie środowiska jest bardzo trudne dla początkujących. Polecam użycie VM szybkiego startu Cloudera i Java IDE, aby złagodzić ból.

Cierpiałem wiele godzin i zorganizowane go w tym artykule: http://www.yuchao.us/2017/05/hive-jdbc-in-cloudera-hadoop.html

Powiązane problemy