我是Kerberos/hive的新手,想使用JDBC连接hive (Kerberos实现)。
> > org.apache.hadoop.conf.Configuration conf = new
> > org.apache.hadoop.conf.Configuration();
> > conf.set("hadoop.security.authentication", "Kerberos");
> > UserGroupInformation.setConfiguration(conf);
> > UserGroupInformation.loginUserFromKeytab("<principal>", "<path to keytab file>");
> >
> >
> > Class.forName(Util.getConstantProperty("hive.class.name"));
> >
> > log.info("Making connection with Hive DB"); hiveConn =
> > DriverManager.getConnection("<hive db url>",,"hive.user","");获取错误:
2018-10-29 20:32:50 ERROR ConnectionHandler:80 - java.lang.IllegalArgumentException: Can't get Kerberos realm java.lang.IllegalArgumentException: Can't get Kerberos realm
at org.apache.hadoop.security.HadoopKerberosName.setConfiguration(HadoopKerberosName.java:65)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:263)
at org.apache.hadoop.security.UserGroupInformation.setConfiguration(UserGroupInformation.java:299)
at utils.ConnectionHandler.connectHiveDB(ConnectionHandler.java:58)发布于 2018-10-30 04:13:48
此外,评论中来自Prazy的建议
不要忘记在krb5.conf中设置默认领域
如果仍然有问题,请将kerberos debug添加到comand行
export HADOOP_OPTS="-Dsun.security.krb5.debug=true"
export HADOOP_ROOT_LOGGER=DEBUG,console发布于 2020-12-24 04:14:02
快速解释
如果使用krb5.conf,请确保已设置
[libdefaults]
default_realm=EXAMPLE.COM如果不使用krb5.conf,则同时设置
java.security.krb5.kdcjava.security.krb5.realm进一步阅读
作为参考,请参阅KerberosUtil的源代码
和底层kerberos库getDefaultRealm
请注意,缺省情况下,getDefaultRealm会在krb5.conf default_realm中查找
get("libdefaults", "default_realm");还有另一个地方可以定义realm……通过属性:
java.security.krb5.realm如果也未通过java.security.krb5.kdc定义kdc,则会以静默方式忽略此值
这一事实已记录在here中
https://stackoverflow.com/questions/53049977
复制相似问题