无法获得Kerberos领域

时间:2018-10-29 16:33:17

标签: hadoop hive kerberos

我是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)

2 个答案:

答案 0 :(得分:0)

此外,Prazy在评论中的建议

不要忘记在krb5.conf中设置默认领域

如果仍然有问题,请将kerberos调试添加到命令行中

export HADOOP_OPTS="-Dsun.security.krb5.debug=true"
export HADOOP_ROOT_LOGGER=DEBUG,console

答案 1 :(得分:0)

快速说明

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

[libdefaults]
  default_realm=EXAMPLE.COM

如果不使用 krb5.conf 设置两者

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

进一步阅读

作为参考,KerberosUtil
的来源 以及底层 kerberos 库 getDefaultRealm

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

get("libdefaults", "default_realm");

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

java.security.krb5.realm

如果 kdc 不是通过 java.security.krb5.kdc 定义的,则该值将被静默忽略

这一事实已被记录here