我们正试图从使用spark-submit转向使用SparkLauncher (运行在Cloudera Hadoop上的Spark2.4)的编程解决方案,并且遇到了这个问题:
Exception javax.security.auth.login.LoginException: Cannot locate KDC
在调用startApplication()之后作业进程的错误输出流上。
启动器使用与spark-submit相同的设置进行配置,包括设置"spark.kerberos.principal“和"spark.kerberos.keytab”(也尝试使用spark.yarn前缀,以及使用setSparkArg()设置--principle和--keytab --但这些属性不是问题)。
尽管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设置(只设置了主体和keytab ),并且所有其他conf设置都会复制到启动器上。
SparkLauncher的输出确认所有Spark属性都已按预期设置。
“无法定位KDC”表示没有找到krb5.conf文件,但是如果它位于默认位置,而spark-submit显然找到了它,那怎么会这样呢?
发布于 2021-05-28 08:51:21
此错误并不一定意味着它无法找到krb5.conf文件。当您的krb5.conf文件没有包含您的主体的正确的域或领域规范时,也会出现这种情况。
例如,如果您的主体是my_principal@MY.NEW.REALM.COM
,而krb5.conf文件只指定了my_principal@MY.OLD.REALM.COM
,那么您也会得到这个错误。
此外,如果您的krb5.conf位于默认位置(/etc/krb5.conf
)以外的位置,我在设置javaExtraOpts时遇到了问题。我发现在运行之前更新env var是有帮助的:export SPARK_SUBMIT_OPTS="-Djava.security.krb5.conf=/path/to/krb5-new.conf"
最后,我发现在spark-submit中设置--principle和--keytab args实际上导致了问题,删除它们可能会有所帮助。
https://stackoverflow.com/questions/65098158
复制相似问题