如何将client_protocol传递给R中的JDBC驱动程序?

时间:2015-12-31 13:41:55

标签: java r jdbc hive r-dbi

我正在尝试使用HiveServer2包来连接dplyr.spark.hive,但我发现一个错误,我无法将用户名传递给dbConnect函数,可能这是我收到有关NULL client_protocol的错误的原因。

是否有人知道如何解决此问题或如何将user/username传递给驱动程序为dbConnect的{​​{1}}函数?

JDBC请求适用于我

beeline

但此R 等效不会:

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

编辑1

我尝试使用不同的> 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(drv@jdrv, "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(drv@jdrv, "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}) 进行连接(如评论中所示),看起来上一个问题已解决(我可能使用了错误的.jar)但现在我收到了错误告诉我连接以某种方式未配置:

.jar

1 个答案:

答案 0 :(得分:0)

问题是错误的hiveServer2规范(JDBC中的getsaves arg)和错误的.text url

解释在https://stackoverflow.com/a/34792408/3857701