我已经配置了kerberos
从远程服务器访问hdfs
,我能够进行身份验证并生成票据,但当我试图访问hdfs
时,我得到了一个错误:
09/02 15:50:02警告ipc。客户端:连接服务器时遇到异常:java.lang.IllegalArgumentException:服务器有无效的Kerberos主体:nn/hdp.stack.com@GLOBAL.STACK.COM
在我们的krb5.conf
文件中,我们在不同的领域下定义了admin_server
和kdc
:
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)