scala - Spark - GSSException:未提供有效凭据(机制级别:找不到任何 Kerberos tgt)
问题描述
我正在尝试在集群模式下运行火花作业,它抛出以下异常:-
java.io.IOException:org.apache.hadoop.security.authentication.client.AuthenticationException:GSSException:未提供有效凭据(机制级别:找不到任何 Kerberos tgt)
但我的工作在客户端模式下运行良好。任何人都可以提出一些解决方案吗?
解决方案
这听起来像您的 Kerberos 凭据没有分发到工作程序节点。
在从 1.x 和 2.x 升级 Spark 版本后,我们遇到了同样的问题,发现使用较新的版本时,Spark 本身会负责密钥表的分发。为此,我们必须提供参数--principal
并--keytab
通过spark-submit
命令。
Spark 文档中有一个很好的关于 Kerberos 的部分。此外,它还提到了一些关于Long-running Applications 的内容。
Spark 支持在 YARN 模式下运行时为这些应用程序自动创建新令牌。需要使用和参数通过
spark-submit
命令将 Kerberos 凭据提供给 Spark 应用程序。--principal
--keytab
提供的 keytab 将通过 Hadoop 分布式缓存复制到运行 Application Master 的机器上。因此,强烈建议至少对 YARN 和 HDFS 进行加密保护。
Kerberos 登录将使用提供的凭据定期更新,并将创建新的受支持的委托令牌。
推荐阅读
- postgresql - 为什么 Testcontainers 找不到使用 init 脚本创建的表?
- vim - 我很难将 Vim 在线编辑器与 Vimium 一起使用
- python - 防止 Django 的单元测试覆盖模型克隆上的变量
- python - 如何让 Try except 输出更多细节?显示它到底发生在哪里?- Python
- node.js - Redis 是否重置过期时间
- javascript - 是否可以在发布到服务器之前拆分 zip 文件?
- ubuntu - snmpwalk:-c:未知对象标识符(未找到子 ID:(顶部)-> -c)
- java - 通过java流收集到hashMap的多个组
- java - 为什么 onClick() 函数需要参数而不是参数
- sql - 在 SAS Data Integration Studio 中将两个或多个字段的数据合并为一个字段