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

CDP Spark集群模式读取Hive表时委托令牌异常求助

Spark提交任务遇到Kerberos委托令牌异常的解决方法

环境信息

  • CDP版本:7.4.4
  • Spark版本:2.4.7.7.1.7.0-551

执行的Spark提交命令

./spark-submit --class com.abc.bdms.sparksql.SparkSQLDriver --master yarn --deploy-mode cluster --executor-memory 2G  --num-executors 4  --keytab /home/bdms/flow.keytab --principal aa_qa/dev@HADOOP.COM  /home/easyops/spark-sql-demo-1.0-SNAPSHOT.jar "select * from ods_employee_info_upload_bby2;"

出现的异常

diagnostics: User class threw exception: org.apache.hadoop.ipc.RemoteException(java.io.IOException): Delegation Token can be issued only with kerberos or web authentication

解决方法

1. 验证Kerberos认证有效性

执行以下命令确认keytab能正确获取票据:

kinit -kt /home/bdms/flow.keytab aa_qa/dev@HADOOP.COM
klist

若klist显示有效票据则认证正常;否则检查:

  • keytab文件权限(需设为600,确保Spark进程可读取)
  • principal名称是否与集群配置一致

2. 添加Spark Kerberos认证配置

在spark-submit命令中补充以下参数,明确指定Kerberos认证规则:

--conf spark.hadoop.security.authentication=kerberos \
--conf spark.yarn.access.hadoopFileSystems=hdfs://<你的HDFS集群地址> \
--conf spark.security.credentials.hive.enabled=true

替换<你的HDFS集群地址>为实际HDFS NameNode地址(如hdfs://cdp-cluster:8020)

3. 配置Hive Metastore认证参数

如果任务访问Hive表,需添加Hive Metastore的Kerberos配置:

--conf spark.hadoop.hive.metastore.authentication=kerberos \
--conf spark.hadoop.hive.metastore.kerberos.principal=hive/_HOST@HADOOP.COM

注意:hive/_HOST@HADOOP.COM需与集群中Hive Metastore的实际principal一致

4. 确认集群全局认证配置

检查Hadoop集群core-site.xml中的核心认证参数,确保配置正确:

<property>
  <name>hadoop.security.authentication</name>
  <value>kerberos</value>
</property>
<property>
  <name>hadoop.security.authorization</name>
  <value>true</value>
</property>

CDP集群可通过Cloudera Manager直接查看并生效这些配置

5. 核对命令参数顺序

确保--keytab和--principal参数位于jar包路径之前,避免参数解析错误(当前命令顺序正确,若调整过需重新确认)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:40:22