2015-12-31 2 views
3

Я пытаюсь соединиться с HiveServer2 с использованием dplyr.spark.hive пакета, но я встречающаяся ошибку, что я не могу передать имя пользователя для функции dbConnect и, вероятно, это является причиной, я получаю сообщение об ошибке о NULLclient_protocol.Как передать client_protocol драйверу JDBC в R?

Кто-нибудь знает, как это исправить, или как передать user/username функции dbConnect, где водитель является JDBC?

Этот beeline запрос отлично работает для меня

beeline -u "jdbc:hive2://host:port/dbname;auth=noSasl" -n mkosinski --outputformat=tsv --incremental=true -f sql_statement.sql > sql_output 

но R эквивалент не:

> library(dplyr.spark.hive) 
Warning: changing locked binding for ‘over’ in ‘dplyr’ whilst loading ‘dplyr.spark.hive’ 
Warning: changing locked binding for ‘partial_eval’ in ‘dplyr’ whilst loading ‘dplyr.spark.hive’ 
Warning: changing locked binding for ‘default_op’ in ‘dplyr’ whilst loading ‘dplyr.spark.hive’ 

Attaching package: ‘dplyr.spark.hive’ 

The following object is masked from ‘package:SparkR’: 

    cache 

Warning messages: 
1: replacing previous import by ‘purrr::%>%’ when loading ‘dplyr.spark.hive’ 
2: replacing previous import by ‘purrr::order_by’ when loading ‘dplyr.spark.hive’ 
> Sys.setenv(HADOOP_JAR = "/opt/spark-1.5.0-bin-hadoop2.4/lib/spark-assembly-1.5.0-hadoop2.4.0.jar") 
> Sys.setenv(HIVE_SERVER2_THRIFT_BIND_HOST = 'tools-1.hadoop.srv') 
> Sys.setenv(HIVE_SERVER2_THRIFT_PORT = '10000') 
> host = 'tools-1.hadoop.srv' 
> port = 10000 
> driverclass = "org.apache.hive.jdbc.HiveDriver" 
> Sys.setenv(HADOOP_JAR = "/opt/spark-1.5.0-bin-hadoop2.4/lib/spark-assembly-1.5.0-hadoop2.4.0.jar") 
> library(RJDBC) 
> dr = JDBC(driverclass, Sys.getenv("HADOOP_JAR")) 
> #url = paste0("jdbc:hive2://", host, ":", port) 
> url = paste0("jdbc:hive2://", host, ":", port,"/loghost;auth=noSasl") 
> class = "Hive" 
> con.class = paste0(class, "Connection") # class = "Hive" 
> con = new(con.class, dbConnect(dr, url, username = "mkosinski", database = "loghost")) 
log4j:WARN No appenders could be found for logger (org.apache.hive.jdbc.Utils). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
Error in .jcall([email protected], "Ljava/sql/Connection;", "connect", as.character(url)[1], : 
    java.sql.SQLException: Could not establish connection to jdbc:hive2://tools-1.hadoop.srv:10000/loghost;auth=noSasl: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{use:database=loghost}) 
> con = new(con.class, dbConnect(dr, url, username = "mkosinski")) 
Error in .jcall([email protected], "Ljava/sql/Connection;", "connect", as.character(url)[1], : 
    java.sql.SQLException: Could not establish connection to jdbc:hive2://tools-1.hadoop.srv:10000/loghost;auth=noSasl: Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{use:database=loghost}) 

EDIT 1

Я пытался использовать различные .jar для подключения (как предложено в комментариях), и похоже, что предыдущая проблема решена (я, вероятно, использовал неправильный .jar), но теперь я получаю сообщение об ошибке говорит мне, что соединение какое-то образом не настроено:

> Sys.setenv(HADOOP_HOME="/usr/share/hadoop/share/hadoop/common/") 
> Sys.setenv(HIVE_HOME = '/opt/hive/lib/') 
> host = 'tools-1.hadoop.srv' 
> port = 10000 
> driverclass = "org.apache.hive.jdbc.HiveDriver" 
> library(RJDBC) 
Loading required package: DBI 
Loading required package: rJava 
> dr = JDBC(driverclass,classPath = c("/opt/hive/lib/hive-jdbc-1.0.0-standalone.jar")) 
> dr2 = JDBC(driverclass,classPath = c("/opt/hive/lib/hive-jdbc-1.0.0-standalone.jar", 
+          "/opt/hive/lib/commons-configuration-1.6.jar")) 
> url = paste0("jdbc:hive2://", host, ":", port) 
> dbConnect(dr, url, username = "mkosinski", database = "loghost") -> cont 
log4j:WARN No appenders could be found for logger (org.apache.hive.jdbc.Utils). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
Error in .jcall([email protected], "Ljava/sql/Connection;", "connect", as.character(url)[1], : 
    java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration 
> dbConnect(dr2, url, username = "mkosinski", database = "loghost") -> cont 
Error in .jcall([email protected], "Ljava/sql/Connection;", "connect", as.character(url)[1], : 
    java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration 
> sessionInfo() 
R version 3.1.3 (2015-03-09) 
Platform: x86_64-redhat-linux-gnu (64-bit) 
Running under: CentOS Linux 7 (Core) 

locale: 
[1] LC_CTYPE=en_US.UTF-8   LC_NUMERIC=C     LC_TIME=en_US.UTF-8   LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8  LC_MESSAGES=en_US.UTF-8  LC_PAPER=en_US.UTF-8   LC_NAME=en_US.UTF-8   
[9] LC_ADDRESS=en_US.UTF-8  LC_TELEPHONE=en_US.UTF-8  LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RJDBC_0.2-5 rJava_0.9-7 DBI_0.3.1 

loaded via a namespace (and not attached): 
[1] tools_3.1.3 
+0

Мои 2 цента: это сообщение об ошибке пахнет как вопрос конфигурации на стороне клиента для Hadoop/Hive баночки, больше всего (ср Например, http://stackoverflow.com/questions/30931599/error-jdbc-hiveconnection-error-opening-session-hive). С какой версией HiveServer2 вы подключаетесь? Какая версия драйвера JDBC фактически выбрана из * CLASSPATH * задания R? –

+0

@SamsonScharfrichter благодарит за открытие моих глаз. Я проверю, совместимы ли все версии hive-client, hive-jdbc и hiveserver2 –

+0

@SamsonScharfrichter. Я проверил, что моя версия hive 1.0.0, а мой hive-jdbc.jar также находится в версии 1.0.0. У меня есть не знаю, как проверить версию HiveServer2. Более того, я не знаю, что такое CLASSPATH задания R –

ответ

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