19

我正在努力将 HiveServer2 支持添加到我公司的 R 数据访问包中。我很好奇生成 R Thrift 客户端的最佳方式是什么。我正在考虑围绕 Java Thrift 客户端编写一个 R 包装器,类似于rhbase所做的,但如果可能的话,我更喜欢纯 R 解决方案。

注意事项:

  • HiveServer2 thrift 服务器与原始 Hive Thrift 服务器不同。
  • 我已经查看并使用了RHive包。在我遇到的其他问题中,它需要系统安装 Hadoop 和 Hive,这在 R 客户端计算机上并不总是可用。
  • 我有点可怕 - 但目前足够 - 解决方法是将beeline客户端包装在一些 R 优点中。
4

1 回答 1

1

这个问题的确切范围对于 Stackoverflow 来说可能过于广泛,提问者确认他放弃了这个任务,但对于未来的读者来说,这可能是要寻找的东西:

从 R 中,您可以使用 JDBC 连接到 Hive。

这并不完全是询问者的目的,但在大多数情况下它应该服务于目的。


解决方案中的关键部分是 RJDBC 包,这里是Cloudera 社区上的一些示例代码

library(DBI)
library(rJava)
library(RJDBC)
hadoop.class.path = list.files(path=c("/usr/hdp/2.4.0.0-169/hadoop"),pattern="jar", full.names=T);
hive.class.path = list.files(path=c("/usr/hdp/current/hive-client/lib"),pattern="jar", full.names=T);
hadoop.lib.path = list.files(path=c("/usr/hdp/current/hive-client/lib"),pattern="jar",full.names=T);
mapred.class.path = list.files(path=c("/usr/hdp/current/hadoop-mapreduce-client/lib"),pattern="jar",full.names=T);
cp = c(hive.class.path,hadoop.lib.path,mapred.class.path,hadoop.class.path)
drv <- JDBC("org.apache.hive.jdbc.HiveDriver","hive-jdbc.jar",identifier.quote="`")
conn <- dbConnect(drv, "jdbc:hive2://ixxx:10000/default", "hive", "hive")
show_databases <- dbGetQuery(conn, "show databases")

全面披露:我是cloudera的员工。

于 2020-07-31T09:01:29.487 回答