2015-10-08 3 views
1

Я использую RJDBC 0.2-5 для подключения к Hive в Rstudio. Мой сервер имеет hasoop-2.4.1 и hive-0.14. Я следую приведенным ниже указаниям, чтобы подключиться к Hive.подключиться к удаленному серверу Hive от R, используя RJDBC/RHive

library(DBI) 
library(rJava) 
library(RJDBC) 
.jinit(parameters="-DrJava.debug=true") 
drv <- JDBC("org.apache.hadoop.hive.jdbc.HiveDriver", 
      c("/home/packages/hive/New folder3/commons-logging-1.1.3.jar", 
       "/home/packages/hive/New folder3/hive-jdbc-0.14.0.jar", 
       "/home/packages/hive/New folder3/hive-metastore-0.14.0.jar", 
       "/home/packages/hive/New folder3/hive-service-0.14.0.jar", 
       "/home/packages/hive/New folder3/libfb303-0.9.0.jar", 
       "/home/packages/hive/New folder3/libthrift-0.9.0.jar", 
       "/home/packages/hive/New folder3/log4j-1.2.16.jar", 
       "/home/packages/hive/New folder3/slf4j-api-1.7.5.jar", 
       "/home/packages/hive/New folder3/slf4j-log4j12-1.7.5.jar", 
       "/home/packages/hive/New folder3/hive-common-0.14.0.jar", 
      "/home/packages/hive/New folder3/hadoop-core-0.20.2.jar", 
      "/home/packages/hive/New folder3/hive-serde-0.14.0.jar", 
      "/home/packages/hive/New folder3/hadoop-common-2.4.1.jar"), 
      identifier.quote="`") 

conHive <- dbConnect(drv, "jdbc:hive://myserver:10000/default", 
        "usr", 
        "pwd") 

Но я всегда получаю следующее сообщение об ошибке:

Error in .jcall([email protected], "Ljava/sql/Connection;", "connect", as.character(url)[1], : java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hive.conf.HiveConf$ConfVars

Даже я попытался с другой версией улей банку, улей-standalone.jar-JDBC, но ничего не похоже на работу .. Я также использую RHive, чтобы подключиться к Hive, но также не было успеха.

Может кто-нибудь помочь мне? .. Я вроде застрял :(

ответ

5

Я не пытался rHive, потому что, кажется, нуждается в сложной установки на всех узлах кластера.

Я успешно подключиться в улей с помощью RJDBC, вот код snipet, который работает на моем Hadoop 2.6 CDH5.4 кластера:

#loading libraries 
library("DBI") 
library("rJava") 
library("RJDBC") 

#init of the classpath (works with hadoop 2.6 on CDH 5.4 installation) 
cp = c("/usr/lib/hive/lib/hive-jdbc.jar", "/usr/lib/hadoop/client/hadoop-common.jar", "/usr/lib/hive/lib/libthrift-0.9.2.jar", "/usr/lib/hive/lib/hive-service.jar", "/usr/lib/hive/lib/httpclient-4.2.5.jar", "/usr/lib/hive/lib/httpcore-4.2.5.jar", "/usr/lib/hive/lib/hive-jdbc-standalone.jar") 
.jinit(classpath=cp) 

#initialisation de la connexion 
drv <- JDBC("org.apache.hive.jdbc.HiveDriver", "/usr/lib/hive/lib/hive-jdbc.jar", identifier.quote="`") 
conn <- dbConnect(drv, "jdbc:hive2://localhost:10000/mydb", "myuser", "") 

#working with the connexion 
show_databases <- dbGetQuery(conn, "show databases") 
show_databases 

тем сложнее найти все потребности банки и где их можно найти ...

UPDATE Уличный автономный JAR содержит все, что необходимо для использования Hive, используя этот автономный JAR с хаосом-общим банком, достаточным для использования Hive.

Так что это упрощенная версия, не нужно беспокоиться о других баночках, что хаоп-общие и улей-автономные банки.

#loading libraries 
library("DBI") 
library("rJava") 
library("RJDBC") 

#init of the classpath (works with hadoop 2.6 on CDH 5.4 installation) 
cp = c("/usr/lib/hadoop/client/hadoop-common.jar", "/usr/lib/hive/lib/hive-jdbc-standalone.jar") 
.jinit(classpath=cp) 

#initialisation de la connexion 
drv <- JDBC("org.apache.hive.jdbc.HiveDriver", "/usr/lib/hive/lib/hive-jdbc-standalone.jar", identifier.quote="`") 
conn <- dbConnect(drv, "jdbc:hive2://localhost:10000/mydb", "myuser", "") 

#working with the connexion 
show_databases <- dbGetQuery(conn, "show databases") 
show_databases 
+0

Спасибо loicmathieu за ваш ответ .. Я взял все банки из каталога lib Hive & hadoop, которые установлены на моем сервере. Также здесь две вещи разные, одна из них - это попытка подключения к удаленному серверу, а не к локальному. во-вторых, Hive2 не настроен на моем сервере, и мне пришлось использовать куст в параметре Conn («jdbc: hive: // myserver: 10000/....) Можете ли вы предложить еще? – user2538041

+0

Привет, я также подключаюсь к удаленному Hive (я использую localhost как пример), но через сервер Hive2. Вы можете попробовать так же, как я, но с помощью драйвера org.apache.hadoop.hive.jdbc.HiveDriver и используемого вами jdbc URl. Основная часть здесь - определить правильный путь к классу и вызов .jinit с ним (в вашем примере вы не используете тот же код инициализации, что и я). Поэтому я предлагаю вам использовать тот же способ для init rJava, что в моем примере (определение cp then callin .jinit ()), Я просто добавляю один за другим все необходимые банки, у меня больше нет NoClassDefFoundError ... – loicmathieu

+0

Я также придерживаюсь того же, что вы упомянули, но снова застрял с той же ошибкой. Однако, когда я проверил Hive-common-0.14. jar, файл класса HiveConf присутствует с соответствующим пакетом. Не знаю, почему JVM не рассматривает это. Даже я проверил моя версия JVM с версией JVM, на которой создан этот файл jar. Шахта новее, чем JVM Jar так что не должно быть какой-либо вопрос :( – user2538041

Смежные вопросы