我正在尝试将Hive与python和R连接,将蜂巢与python成功连接,但未与R连接成功,首先让我告诉我如何使用python进行连接,
1.已安装cloudera Hive ODBC 2.5.25 64位。
2.已安装MIT Kerberos @ kfw-4.0.1-amd64.msi
3.已安装pyodbc。
4.在我的ODBC数据源中创建了DSN。
5.输入我的密码,将我的.cong文件替换为.ini文件,并从Kerberos获得票证。
6.在cmd中初始化我的用户名和密码。
7.在python
select t.app_id, t.type,
row_number() over (partition by t.type order by t.app_id) as rowno_type
from table t;
一切都与Pyhton配合良好,但在R。
sql_conn = pyodbc.connect('DSN= source;DRIVER={Cloudera ODBC Driver for Hive}', autocommit=True)
并尝试了
Sys.setenv(HADOOP_HOME="C:/Hadoop/")
Sys.setenv(HADOOP_BIN="C:/Hadoop/bin")
Sys.setenv(HADOOP_CONF_DIR="C:/Hadoop/etc/hadoop")
Sys.setenv(HADOOP_CMD='C:/Hadoop/bin/hadoop')
install.packages("C:/Users/ramakrh/Documents/R/rhdfs_1.0.8.zip", repos=NULL, type="source")
install.packages("C:/Users/ramakrh/Documents/R/rmr2_3.3.1.zip", repos=NULL, type="source")
.jaddClassPath("C:/Hadoop/lib/hadoop-core-1.2.1.jar")
library(rhdfs)
hdfs.init()
library("RJDBC")
options(java.parameters = "-Xmx8192m")
hadoop.class.path <- list.files(path = c("C:/Hadoop"), pattern = "jar", full.names = T)
hive.class.path <- list.files(path = c("C:/Hive/jdbc"), pattern = "jar", full.names = T)
hadoop.mapreduce.path = list.files(path = c("c:/Hadoop/hadoop-mapreduce"), pattern="jar", full.names=T)
hive.lib.path <- list.files(path = c("C:/Hive/lib"), pattern = "jar", full.names = T)
class.path = c(hadoop.class.path,hive.class.path, hadoop.mapreduce.path, hive.lib.path)
.jinit(classpath = class.path)
conf = .jnew("org.apache.hadoop.conf.Configuration")
conf$set("hadoop.security.authentication", "kerberos")
ugi = J("org.apache.hadoop.security.UserGroupInformation")
ugi$setConfiguration
ugi$loginUserFromKeytab("#####@###.#######.COM",".keytab")
drv <- JDBC("org.apache.hive.jdbc.HiveDriver")
conn <- dbConnect(drv, "jdbc:hive2://########.#######.com:10000/;principal=hive/_HOST@###.#######.COM")
在hadoop.class.path中,我给了“ hadoop-common-2.7.7.jar”
在hive.class.path中,我给出了“ hive-jdbc-2.3.6-standalone.jar”
在hadoop.mapreduce.path中,我给了“ hadoop-mapreduce-client-core-2.7.7.jar”
我仍然不确定我是否提供了所需的jar文件。如果我错了,请纠正。
此行出现错误,“ ugi = J(“ org.apache.hadoop.security.UserGroupInformation”)“
.jaddClassPath(Sys.glob(strsplit(system("hadoop classpath",int=T),":",T)[[1]]))
conf = .jnew("org.apache.hadoop.conf.Configuration")
conf$set("hadoop.security.authentication", "Kerberos")
ugi = J("org.apache.hadoop.security.UserGroupInformation")
ugi$setConfiguration(conf)
ugi$loginUserFromKeytab("#####3@###.#####.COM",".keytab")
#library(RJDBC)
j=JDBC("org.apache.hive.jdbc.HiveDriver")
c=dbConnect(j, "jdbc:hive2://#######.#######.com:10000/;principal=hive/_HOST@###.######.COM")
dbGetQuery(c, "show databases")
对于第二个代码段,即使设置了系统变量,第一行从根本上也会引发错误。 “ .jaddClassPath(Sys.glob(strsplit(system(” hadoop classpath“,int = T),”:“,T)[[1]]))”
注意:我在一家具有本地服务器cloudera的初创公司中工作,因此我没有在本地安装Hadoop和Hive文件,而仅使用Hue访问我的Hive和Impala表。
或建议我在R 3.6.1中安装Error in .jfindClass(as.character(class)) :
java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.security.UserGroupInformation
的步骤。将安装这些软件包将有助于连接问题的解决方法
我的参考资料:
1. https://github.com/s-u/RJDBC/issues/43
2. https://community.cloudera.com/t5/Support-Questions/Hi-How-to-integrate-the-R-language-with-Hive-hadoop/m-p/123653#M86397
3. https://community.cloudera.com/t5/Support-Questions/R-with-Hive/td-p/221080
谢谢您的帮助。.