ClassNotFoundException: org.apache.hive.jdbc.HiveDriver

94
8

Я новичок в Java. Я пытаюсь подключиться к серверу hive через java и использовать образец кода из 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);
}
}
}


Я поместил все банки в нужное место и обновил файл pom, но получив


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)

Я искал решение довольно долгое время, но не смог его решить. Пожалуйста, дайте мне знать, как это исправить.

спросил(а) 2016-03-25T03:08:00+03:00 4 года, 3 месяца назад
1
Решение
124

Это связано с несоответствием версии hivesever2. Если версия Hive больше 0,13, вам, возможно, придется это использовать.


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

Также убедитесь, что вы добавили эту банку в свой путь к классу.

ответил(а) 2016-03-25T20:14:00+03:00 4 года, 3 месяца назад
66

Из трассировки стека, которую вы опубликовали, я предполагаю, что вы запускаете это через IntelliJ и получаете эту ошибку.


POM описывает, как создать проект, а не как выполнить скомпилированный проект. В вашем классе вы не импортируете org.apache.hive.jdbc.HiveDriver, поэтому я предполагаю, что IntelliJ не собирается гарантировать, что его содержащий JAR передается JVM в пути к классам.

То, что, как мне кажется, вам нужно сделать в этом случае, - это вручную передать местоположение куста куста в пути к классам. Где-то в настройках проекта (НЕ POM) в вашей среде IDE, где будут настройки времени выполнения, вам нужно будет включить переключатель командной строки cp или -classpath, который укажет на JAR-улей. Или, альтернативно, вы можете сделать, как говорит Дэвид Фернадес и импортировать класс, который должен заставить IntelliJ передавать JAR в путь к классам.

ответил(а) 2016-03-25T03:30:00+03:00 4 года, 3 месяца назад
66

Вам нужно включить библиотеку в свой проект (файл JAR), который включает в себя отсутствующий класс org.apache.hive.jdbc.HiveDriver. Здесь это ссылка на версию 0.8.0.

ответил(а) 2016-03-25T03:14:00+03:00 4 года, 3 месяца назад
39

Я думаю, причина в том, что компилятор Java или JVM не читает путь к классам, как предполагалось.


Настройка среды для начинающих действительно сложна. Я рекомендую использовать быстрые клавиши Cloudera VM и Java IDE для облегчения боли.


Я побывал много часов и организовал его в этой статье: http://www.yuchao.us/2017/05/hive-jdbc-in-cloudera-hadoop.html

ответил(а) 2017-05-22T01:32:00+03:00 3 года, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема