问题是:正如预期的那样,os用户能够启动并拥有spark流应用程序。但是,当我们尝试运行应用程序所有者不是os用户的作业时,spark streaming返回一个错误,表示找不到该用户。从“spark submit”命令的输出中可以看到:
main : run as user is 'user_name'
main : requested yarn user is 'user_name'
User 'user_name' not found
我已经在其他一些论坛上看到了这个错误,建议用户创建操作系统,但不幸的是这不是一个选项。在storm应用程序中,只能使用kerberos的用户可以与os用户结合使用,但spark中的情况似乎不是这样。
到目前为止,我尝试过的方法是:最接近的方法是使用两个操作系统用户,其中一个用户对第二个用户的keytab文件具有“读取”权限。我将应用程序从一个运行到“模拟”第二个,第二个显示为所有者。两个用户都是操作系统用户,因此不会出现任何错误,但当我使用仅限kerberos的用户作为第二个用户时,它确实会失败。下面您可以看到提交的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.
非常感谢你的帮助!
暂无答案!
目前还没有任何答案,快来回答吧!