从远程计算机上的服务器连接到支持配置单元的kerberos

yqlxgs2m  于 2021-06-29  发布在  Hive
关注(0)|答案(2)|浏览(578)

我在本地机器上运行一个r,我的配置单元服务器在aws机器上使用cloudera配置,并使用kerberos启用。我现在无法使用jdbc连接从本地r示例连接到配置单元服务器。
我想知道是否有任何可用的选项,可以帮助我连接到配置单元服务器从r?我尝试了下面的代码并得到了错误。

  1. library(RJDBC)
  2. drv1 <- JDBC("org.apache.hive.jdbc.HiveDriver",list.files("Rjars/jars/hive_jdbc/",pattern="jar$",full.names=T))
  3. con<-dbConnect(drv,'jdbc:hive2://ec2-xx-xx-xx-xxx.us-west-2.compute.amazonaws.com:10000/default;principal=hive/ip-xxx-xx-xx-xx.us-west-2.compute.internal@REALM.COM',"username","pwd")

控制台输出

  1. Jun 09, 2016 3:34:07 PM org.apache.hive.jdbc.Utils parseURL
  2. INFO: Supplied authorities: ec2-xx-xx-xxx-xxx.us-west-2.compute.amazonaws.com:10000
  3. Error in .verify.JDBC.result(jc, "Unable to connect JDBC to ", url) :
  4. Unable to connect JDBC to jdbc:hive2://ec2-xx-xx-xx-xxx.us-west-2.compute.amazonaws.com:10000/default;principal=hive/ip-xx-xx-xx-xx.us-west-2.compute.internal@REALM.COM (Could not initialize class org.apache.hadoop.security.UserGroupInformation)
  5. Jun 09, 2016 3:34:07 PM org.apache.hive.jdbc.Utils parseURL
  6. INFO: Resolved authority: ec2-xx-xx-xxx-xxx.us-west-2.compute.amazonaws.com:10000
ycl3bljg

ycl3bljg1#

我也遇到过同样的情况。我的解决方案是:

  1. connCloudera <- function(db_user, KrbRealm, KrbHostFQDN, KrbHostPort, DB,
  2. jdbcDriverPath, KrbServiceName='hive', user=NULL,
  3. path_keytab=NULL,){
  4. #' Cloudera connection
  5. #'
  6. #' This function creates a connection to a kerberized Cloudera instance.
  7. #'
  8. #' @param user user to login with kerberos
  9. #' @param db_user user to login to the db
  10. #' @param path_keytab path to kerberos keytab file
  11. #' @param KrbRealm Kerberos realm to connect to
  12. #' @param KrbHostFQDN Fully Qualified Domain Name of the Kerberos Host that exposes target service
  13. #' @param KrbHostPort port number to connect to on given host
  14. #' @param KrbServiceName name of the required service
  15. #' @param DB database to connect to
  16. #' @param jdbcDriverPath class path that needs to be appended in order to load the desired JDBC driver
  17. #'
  18. #' @keywords Cloudera, Kerberos
  19. #' @return connection
  20. #' @export
  21. #' @import DBI
  22. #' @import RJDBC
  23. if(is.null(user)) user <- system('whoami',intern = TRUE)
  24. if(is.null(path_keytab)) path_keytab <- paste0('/home/',user,'/',user,'.keytab')
  25. system(paste0("kinit ",db_user,"@",KrbRealm," -k -t ",path_keytab))
  26. hivedrv <- RJDBC::JDBC(driverClass="com.cloudera.hive.jdbc41.HS2Driver",
  27. classPath=list.files(jdbcDriverPath, pattern="jar$", full.names=T),
  28. identifier.quote="`")
  29. authentication <- paste(paste0("jdbc:hive2://",KrbHostFQDN,":",KrbHostPort,"/",DB),
  30. "AuthMech=1",
  31. paste0("KrbRealm=",KrbRealm),
  32. paste0("KrbHostFQDN=",KrbHostFQDN),
  33. paste0("KrbServiceName=",KrbServiceName),
  34. "SSL=1",
  35. "AllowSelfSignedCert=1",
  36. "CAIssuedCertNamesMismatch=1",
  37. sep=";")
  38. hivecon <- DBI::dbConnect(hivedrv, authentication)
  39. return(hivecon)
  40. }
展开查看全部
p3rjfoxz

p3rjfoxz2#

你必须做“kinit”的等价物
在我的例子中,您可以使用与正在使用的cloudera版本等效的hadoop公共库,并执行以下说明:

  1. Sys.setenv(KRB5_CONFIG = "/conf/krb5.conf")
  2. Sys.setenv(sun.security.jgss.debug="FALSE");
  3. conf=.jnew ("org.apache.hadoop.conf.Configuration")
  4. conf$set("hadoop.security.authentication", "Kerberos")
  5. ugi=J("org.apache.hadoop.security.UserGroupInformation")
  6. ugi$setConfiguration (conf)
  7. ugi$loginUserFromKeytab("webApp@MYCOMPANY","conf/webapp.keytab")

相关问题