Spark作为另一个用户提交给yarn



是否可以将spark作业提交到yarn集群并选择,无论是使用命令行还是在jar中,哪个用户将"拥有"该作业?

spark-submit将从包含用户的脚本启动。

PS:如果集群有kerberos配置(并且脚本是keytab),它仍然可能吗?

对于不支持kerberos的集群:在提交Spark作业之前执行export HADOOP_USER_NAME=zorro
如果您希望在shell脚本的其余部分(或在交互式shell会话中)恢复到默认凭据,请确保随后启用unset HADOOP_USER_NAME

对于支持 kerberos的集群,模拟另一个帐户而不破坏其他作业/会话(这可能取决于您的默认票证)的干净方法将是这一行中的内容…

export KRB5CCNAME=FILE:/tmp/krb5cc_$(id -u)_temp_$$
kinit -kt ~/.protectedDir/zorro.keytab zorro@MY.REALM
spark-submit ...........
kdestroy

对于不支持kerberos的集群,可以添加如下配置:

--conf spark.yarn.appMasterEnv.HADOOP_USER_NAME=<user_name>

另一种(更安全的)方法是使用proxy authentication -基本上你创建一个服务帐户,然后允许它冒充其他用户。

$ spark-submit --help 2>&1 | grep proxy
  --proxy-user NAME           User to impersonate when submitting the application.

假设使用kerberos/安全集群。

我提到它更安全,因为您不需要存储(和管理)您必须模拟的所有用户的密钥选项卡。

要启用模拟,您需要在Hadoop端启用几个设置,以告诉哪个帐户可以模拟哪些用户或组以及在哪些服务器上。假设您已经创建了svc_spark_prd服务帐户/用户。

hadoop.proxyuser.svc_spark_prd.hosts -允许提交模拟Spark应用程序的服务器的完全合格域名列表。*是允许的,但不推荐用于任何主机。

还指定hadoop.proxyuser.svc_spark_prd.usershadoop.proxyuser.svc_spark_prd.groups以列出允许svc_spark_prd模拟的用户或组。*是允许的,但不推荐使用。

另外,请查看有关代理身份验证的文档。

例如,Apache Livy使用这种方法代表其他最终用户提交Spark作业。

如果你的用户存在,你仍然可以启动你的spark提交Su $my_user -c spark submit[…]

我不确定kerberos keytab,但是如果您使用这个用户创建一个kinit,应该没问题。

如果你不想要密码而不能使用su,我邀请你看看这个stackoverflow的答案:如何作为另一个用户运行脚本而不需要密码

相关内容

  • 没有找到相关文章

最新更新