首页 > 解决方案 > 如何使用 Kerberos-Only 用户启动 Spark Streaming YARN 应用程序?

问题描述

  1. 问题:正如预期的那样,操作系统用户能够启动并拥有火花流应用程序。但是,当我们尝试运行应用程序所有者不是 OS 用户的作业时,火花流返回一个错误,指出未找到该用户。正如您在“spark-submit”命令的输出中看到的那样:
main : run as user is 'user_name'
main : requested yarn user is 'user_name'
User 'user_name' not found

我已经在其他一些论坛上看到了这个错误,建议创建操作系统用户,但不幸的是,这不是一个选项。在 Storm 应用程序中,Kerberos-Only User 可以与 OS-User 结合使用,但在 spark 中似乎并非如此。

  1. 到目前为止我所尝试的:我能得到的最接近的是使用两个操作系统用户,其中一个对第二个的 keytab 文件具有“读取”权限。我从一个运行应用程序以“模拟”第二个,第二个显示为所有者。由于两者都是操作系统用户,因此没有出现任何错误,但是当我使用 Kerberos-Only 用户作为第二个用户时,它确实会失败。下面你可以看到提交的 spark-streaming 命令(顺便说一句,两者都是 HDFS 用户,否则也无法启动):
spark-submit --master yarn --deploy-mode cluster --keytab /etc/security/keytabs/user_name.keytab 
--principal kerberosOnlyUser@LOCAL 
--files ./spark_jaas.conf#spark_jaas.conf,
./user_name_copy.keytab#user_name_copy.keytab --conf "spark.driver.extraJavaOptions=-Djava.security.auth.login.config=./spark_jaas.conf" 
--conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./spark_jaas.conf" 
--driver-java-options "-Djava.security.auth.login.config=./spark_jaas.conf" 
--conf spark.yarn.submit.waitAppCompletion=true --class ...

我也尝试了该命令的替代方法--proxy-user,但返回了相同的错误。

真的不能在 spark 中使用仅限 Kerberos 的用户吗?或者有解决方法吗?环境是:

Spark 2.3.0 on YARN.
Hadoop 2.7.3.

非常感谢你的帮助!

标签: hadoophdfsspark-streaminghadoop-yarnkerberos

解决方案


推荐阅读