You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用Kerberos时,能否禁用Hadoop YARN的PTR反向IP检查?

解决Spark客户端连接ResourceManager的Kerberos反向IP检查问题

核心问题说明

你碰到的是Kerberos身份验证中反向DNS解析(PTR记录)与服务主体不匹配引发的错误。虽然修改krb5.conf设置rdns=false是常规禁用反向解析的方案,但Hadoop/Spark的Kerberos客户端可能有自身配置覆盖了系统级的krb5参数,导致该设置未生效。

可行解决方案

1. 修改Hadoop/YARN核心配置

在YARN和Hadoop的配置文件中添加反向解析禁用相关参数,强制服务使用私有IP/主机名进行身份验证:

  • 编辑yarn-site.xml,新增以下配置:
    <property>
        <name>yarn.resourcemanager.principal</name>
        <value>yarn/_HOST@YOUR_REALM</value>
        <description>使用_HOST占位符,让服务自动适配私有IP对应的主机名</description>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>私有IP:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>私有IP:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>私有IP:8031</value>
    </property>
    
  • 编辑core-site.xml,新增以下配置:
    <property>
        <name>hadoop.security.auth_to_local</name>
        <value>RULE:[2:$1@$0](yarn/_HOST@YOUR_REALM)s/.*/yarn/</value>
        <description>映射Kerberos主体到本地用户,忽略主机名差异</description>
    </property>
    <property>
        <name>hadoop.security.dns.interface</name>
        <value>eth0</value> <!-- 指定集群使用的私有网卡 -->
    </property>
    <property>
        <name>hadoop.security.dns.nameserver</name>
        <value>私有DNS服务器IP</value> <!-- 确保解析用私有DNS,不走公网 -->
    </property>
    

2. 显式配置Spark客户端的Kerberos参数

在Spark客户端的spark-defaults.conf或提交脚本中添加参数,强制客户端使用指定的krb5配置并禁用反向解析:

spark.driver.extraJavaOptions=-Dsun.security.krb5.disableReferrals=true -Djava.security.krb5.conf=/path/to/your/krb5.conf
spark.executor.extraJavaOptions=-Dsun.security.krb5.disableReferrals=true -Djava.security.krb5.conf=/path/to/your/krb5.conf
spark.yarn.principal=your_client_principal@YOUR_REALM
spark.yarn.keytab=/path/to/your/client.keytab

确保指定的krb5.conf中包含:

[libdefaults]
    default_realm = YOUR_REALM
    rdns = false

(显式指定krb5.conf路径可避免客户端读取系统默认配置时忽略rdns设置)

3. 重新生成ResourceManager的Kerberos主体与Keytab

如果之前ResourceManager的Kerberos主体是硬编码的公网主机名,重新生成主体为yarn/私有主机名@YOUR_REALM,或直接使用yarn/_HOST@YOUR_REALM(推荐,自动适配当前主机名),然后更新对应的keytab文件并重启ResourceManager服务。

验证步骤

  1. 重启ResourceManager及所有YARN相关服务
  2. 在Spark客户端执行kinit获取Kerberos票据后,提交测试任务:
spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster $SPARK_HOME/examples/jars/spark-examples_*.jar 10
  1. 查看YARN日志和Spark驱动日志,确认不再出现IllegalArgumentException: Server has invalid Kerberos principal错误

内容的提问来源于stack exchange,提问作者Amir Abbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:42:55