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
相关产品推荐
相关产品推荐

