我试图通过R远程连接到Hive服务器,并执行身份验证,我使用Kerberos keytab文件。
.jcall(“ RJavaTools”,“ Ljava / lang / Object;”,“ invokeMethod”, cl,:java.io.IOException:登录失败 来自keytab的antonio.silva@HADOOPREALM.LOCAL C:/用户/antonio.silva/桌面/jars/antonio.silva.keytab: javax.security.auth.login.LoginException:空(68)
但是当我尝试通过keytab登录用户时,会出现错误。
#loading libraries
library("DBI")
library("rJava")
library("RJDBC")
hadoop.class.path <- list.files(path = c("C:/Users/antonio.silva/Desktop/jars/hadoop/"), pattern = "jar", full.names = T)
hive.class.path <- list.files(path = c("C:/Users/antonio.silva/Desktop/jars/hive/"), pattern = "jar", full.names = T)
class.path = c(hadoop.class.path,hive.class.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(conf)
path = "C:/Users/antonio.silva/Desktop/jars/antonio.silva.keytab"
ugi$loginUserFromKeytab('antonio.silva@HADOOPREALM.LOCAL', path)
我做错了什么?
答案 0 :(得分:1)
我找到了解决方案,事实证明,我需要将MIT Kerberos conf文件(krb5.conf)放置在Java目录“ ~~ Java \ jre1.8.0_192 \ lib \ security”中。
将文件粘贴到目录中之后,我可以成功执行连接并连接到Hive服务器,除了先前发布的代码外,还使用以下代码:
drv <- JDBC("org.apache.hive.jdbc.HiveDriver")
conn <- dbConnect(drv, "jdbc:hive2://hivename:10000/default;principal=hive/_HOST@HADOOPREALM.LOCAL")
当需要通过R与HDFS进行连接时,此凭据验证有效。在这里,我给出了有关连接以及为使用R读取和写入HDFS服务器中的文件所需的配置的答案。
HDFS配置:How to acess to HDFS via R?