很长一段时间以来,我一直在为这件事而苦苦挣扎,我正在绝望地寻求帮助。
语境
我有一个要提交spark-submit
给 YARn 资源管理器的胖 jar。YARN 身份验证由 Kerberos 协议管理,为此我有一个有效的主体和一个 keytab 文件。Keytab 之前已被测试为有效。
YARN 资源管理器和整个集群在 Linux 服务器上的 Cloudera 上运行。我的应用程序需要从 Windows Server 提交。
我已将密钥表文件放在 C:\Kerberos\filename 中。
为了使 Spark 能够自动创建 Kerberos 票证,我想在提交时传递 keytab 和 principal。我通过将以下配置放入spark-defaults.conf
文件中来做到这一点:
- spark.yarn.keytab = C:\Kerberos\文件名
- spark.yarn.principal = user@domain
问题
发生两件事:
在我描述的情况下,当提交开始时,我收到一条登录成功消息,但是当 Spark 上下文启动并转到 YARN 时,我收到一个
No FileSystem for scheme: C
,这让我认为它被解释C
为前缀而不是根。如果我尝试
file:///C/Kerberos/filename
,我会立即得到一个找不到文件的异常。这是由签入引起的SparkSubmit.scala
(检查了2.2 版的源代码- 我正在使用的那个),它永远不会与类似的 URI 一起使用file:///
我到底应该如何指定 keytab 文件的路径?我只能猜测这在某种程度上取决于 Windows Server 作为提交者