【发布时间】:2021-03-13 19:50:14
【问题描述】:
我们正在尝试从使用 spark-submit 转移到使用 SparkLauncher(在 Cloudera Hadoop 上运行的 Spark 2.4)的编程解决方案,并且遇到了这个问题:
Exception javax.security.auth.login.LoginException: Cannot locate KDC
关于调用startApplication()后作业进程的错误输出流。
启动器配置了与 spark-submit 相同的设置,包括设置“spark.kerberos.principal”和“spark.kerberos.keytab”(也尝试使用 spark.yarn 前缀,以及设置 --principle 和 - -keytab 以及 setSparkArg() - 但这些属性不是问题)。
尽管 krb5.conf 位于所有机器和驱动程序的默认位置,但我尝试设置
.setConf("spark.executor.extraJavaOptions", "-Djava.security.krb5.conf=/etc/krb5.conf")
.setConf("spark.driver.extraJavaOptions", "-Djava.security.krb5.conf=/etc/krb5.conf")
同样,结果相同。
在 spark-submit 调用中没有其他与 auth/kerberos 相关的 conf 设置(仅设置了 principal 和 keytab),并且所有其他 conf 设置都在 Launcher 上复制。
SparkLauncher 的输出确认所有 Spark 属性均按预期设置。
“Cannot locate KDC”表示没有找到krb5.conf文件,但是如果它在默认位置并且spark-submit明显找到它怎么会呢?
【问题讨论】:
-
“无法定位 KDC”可能并不意味着 krb5.conf 不存在,但可能是 krb5.conf 的配置问题。您可以检查所有机器上的 krb5.conf 是否具有相同的配置。如果是,您可以尝试在任何机器
kinit <principal_name> -kt <path_to_keytab_file>上使用 keytab 进行手动身份验证,看看效果如何。 -
来自
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext的调试跟踪可以准确地解释当 JAAS 尝试连接到 KDC 时会发生什么。 -
如果你不害怕大量神秘的东西,也可以试试
-Dsun.security.krb5.debug=true。 -
@SyamSankar 我知道 krb5.confs 很好,因为使用 k5start(类似于 kinit)启动的 spark-submit 可以工作。
-
需要明确的是,由于相同的设置和相同的 krb5 与 spark-submit 一起使用,这几乎必须归结为它与 SparkLauncher 之间的一些差异。
标签: scala apache-spark hadoop cloudera