从远程服务器

时间:2015-09-03 14:33:29

标签: hadoop kerberos

我已配置kerberos从远程服务器访问hdfs,我可以验证并生成票证,但当我尝试访问hdfs时,我得到的是错误:

  

09/02 15:50:02 WARN ipc.Client:连接到服务器时遇到异常:java.lang.IllegalArgumentException:服务器具有无效的Kerberos主体:nn /hdp.stack.com@GLOBAL.STACK.COM < / p>

在我们的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

有什么想法吗?任何帮助非常感谢!

3 个答案:

答案 0 :(得分:2)

在你的KRB5 conf中,你应该明确地定义 哪个机器属于哪个领域,从通用规则开始然后添加例外。

E.g。

[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

答案 1 :(得分:0)

我最近在2个单独的群集上使用HDP2.2遇到了这个问题,并且在将调试器连接到客户端之后我发现了问题,这可能会影响其他类型的hadoop。

有一个可能的hdfs配置dfs.namenode.kerberos.principal.pattern,它指示主模式是否有效。如果主体不匹配且与当前群集主体不匹配,那么您将获得您看到的异常。在hdp2.3及更高版本以及cdh 5.4及更高版本中,它看起来像默认设置为*,这意味着所有内容都会命中。但是在HDP2.2中,它不在默认值中,因此每当您尝试与现有的kerberized hdfs中的远程kerberized hdfs通信时,就会出现此错误。

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

答案 2 :(得分:0)

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

07/08/07 15:04:45 WARN客户端:连接到服务器时遇到异常:java.lang.IllegalArgumentException:服务器具有无效的Kerberos主体:hdfs/host1@REALM.DEV java.io.IOException:出现本地异常失败:java.io.IOException:java.lang.IllegalArgumentException:服务器具有无效的Kerberos主体: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>