本文介绍了无法获取Kerberos领域的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不熟悉Kerberos/配置单元,希望使用JDBC连接配置单元(已实现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)

推荐答案

快速解释

如果使用krb5.conf确保您已设置

[libdefaults]
  default_realm=EXAMPLE.COM

如果不使用krb5.conf,请同时设置

  • java.security.krb5.kdc
  • java.security.krb5.realm

进一步阅读

KerberosUtil来源
以供参考和基础Kerberos库getDefaultRealm

请注意,默认情况下getDefaultRealm在您的krb5.conf默认领域中查找:

get("libdefaults", "default_realm");

还有一个realm可以定义的地方...通过属性:

java.security.krb5.realm

如果kdc没有也通过java.security.krb5.kdc

定义,则忽略此值

此事实已记录here

这篇关于无法获取Kerberos领域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 01:24