从远程服务器访问hdfs时,Kerberos默认使用错误的主体



我已经配置了kerberos从远程服务器访问hdfs,我能够进行身份验证并生成票据,但当我试图访问hdfs时,我得到了一个错误:

09/02 15:50:02警告ipc。客户端:连接服务器时遇到异常:java.lang.IllegalArgumentException:服务器有无效的Kerberos主体:nn/hdp.stack.com@GLOBAL.STACK.COM

在我们的krb5.conf文件中,我们在不同的领域下定义了admin_serverkdc:

DEV.STACK.COM = {
admin_server = hdp.stack.com
kdc = hdp.stack.com
}

为什么它默认是一个不同的领域,也定义在我们的krb5 (GLOBAL.STACK.COM?)我确保我们所有的hadoop xml文件都是@DEV.STACK.COM

任何想法?任何帮助非常感激!

在您的KRB5配置文件中,您应该显式地定义哪台机器属于哪个领域,从通用规则开始,然后添加例外。

[domain_realm]
 stack.com = GLOBAL.STACK.COM
 stack.dev = DEV.STACK.COM
 vm123456.dc01.stack.com = DEV.STACK.COM
 srv99999.dc99.stack.com = DEV.STACK.COM

我们有一个Cluster Spark,需要连接到Cloudera上的hdfs,我们得到相同的错误。

8/08/07 15:04:45警告客户端:连接到服务器时遇到异常:java.lang.IllegalArgumentException: server has invalid Kerberos principal: hdfs/host1@REALM.DEVjava.io.IOException: java.lang.IllegalArgumentException: Server has invalid Kerberos principal: hdfs/host1@REALM.DEV;主机详细信息:本地主机为:"workstation1.local/10.1.0.62";目标主机为:"host1":8020;

根据ohshazbot的上述帖子和Cloudera网站https://community.cloudera.com/t5/Cloudera-Manager-Installation/Kerberos-issue/td-p/29843上的其他帖子,我们修改了core-site.xml(在Spark Cluster .... Spark/conf/core-site.xml)文件,添加了该属性,连接成功

<property>
  <name>dfs.namenode.kerberos.principal.pattern</name>
  <value>*</value>
</property>

我最近在两个不同的集群上使用HDP2.2遇到了一个问题,在将调试器连接到客户端后,我发现了这个问题,这可能会影响其他风格的hadoop

有一个可能的hdfs config dfs.namenode.kerberos.principal.pattern来指示主体模式是否有效。如果主体不匹配且不匹配当前集群主体,那么就会得到刚才看到的异常。在hdp2.3及更高版本中,以及cdh5.4及更高版本中,似乎将此设置为默认值*,这意味着所有内容都命中。但是在HDP2.2中,它不是默认的,所以当你试图从你现有的kerberized hdfs与远程的kerberized hdfs通信时,这个错误就会发生。

只需在此属性中添加*,或任何其他匹配本地和远程主体名称的模式,即可解决此问题。

give ->

ls -lart

检查keytab文件,例如:.example.keytab

如果keytab文件在那里给- - - - - -

klist -kt keytabfilename

示例:klist -kt .example.keytab

您将在输出中得到类似example@EXAM-PLE.COM的principal然后给

kinit -kt .example.keytab(keytabfile) example@EXAM-PLE.COM(principal)

最新更新