目前我使用的是cloudera hadoop单节点群集(已启用kerberos。)
在客户端模式下,我使用以下命令
kinit
spark-submit --master yarn-client --proxy-user cloudera examples/src/main/python/pi.py
这很好用。在集群模式下,我使用以下命令(没有完成kinit,缓存中没有TGT)
spark-submit --principal <myprinc> --keytab <KT location> --master yarn-cluster examples/src/main/python/pi.py
也工作正常。但是当我在集群模式下使用以下命令时(没有完成kinit并且缓存中没有TGT)
spark-submit --principal <myprinc> --keytab <KT location> --master yarn-cluster --proxy-user <proxy-user> examples/src/main/python/pi.py
抛出以下错误
<proxy-user> tries to renew a token with renewer <myprinc>
我想在集群模式下,spark-submit不会在客户端计算机中查找TGT ...它会将“keytab”文件传输到集群,然后启动spark作业。那么为什么在“yarn-cluster”模式下提交时指定“--proxy-user”选项会查找TGT。我做错了什么。
答案 0 :(得分:2)
Spark不允许使用proxy-user提交keytab和principal。 YARN模式(第二段)官方文档中的功能描述明确指出在运行长时间运行的作业时需要keytab和principal。这使应用程序可以继续处理任何安全问题。
想象一下,如果登录到您的应用程序的所有应用程序用户都可以代理到您的密钥表。
我必须做Hive做的“spark-submit”。在提交我的应用程序然后提供代理用户之前基本上是kinit。所以这就是我如何解决它。
kinit @ -k -t 使用--proxy-user
进行spark-submit是最好的实施方式。所以没有你没有做错任何事。