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

时间:2016-10-28 09:17:43

标签: hadoop apache-spark yarn kerberos

是否可以向纱线群集提交火花作业,并使用命令行或在罐子内部选择哪个用户将拥有"这份工作?

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

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

4 个答案:

答案 0 :(得分:4)

对于非kerberized群集export HADOOP_USER_NAME=zorro,在提交Spark作业之前就行了。
如果要在shell脚本的其余部分(或交互式shell会话中)恢复默认凭据,请确保之后unset HADOOP_USER_NAME

对于 kerberized群集,模仿其他帐户而不会破坏其他作业/会话(可能取决于您的默认票证)的干净方式将是线...

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

答案 1 :(得分:3)

对于非kerberized群集,您可以将Spark conf添加为:

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

答案 2 :(得分:1)

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

我不确定kerberos keytab,但是如果你和这个用户做一个kinit应该没关系。

如果您因为不想要密码而无法使用su,我邀请您查看此stackoverflow答案: how to run script as another user without password

答案 3 :(得分:0)

另一种(更安全)的方法是使用proxy authentication-基本上,您创建一个服务帐户,然后将其模拟给其他用户。

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

假设使用Kerberos /安全集群。

我提到它更加安全,因为您不需要存储(和管理)将要模拟的alll用户的密钥表。

要启用模拟,您需要在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冒充的用户或组。允许使用*,但不建议任何用户/组使用。{p>

还要检查documentation on proxy authentication

例如,

Apache Livy使用此方法代表其他最终用户提交Spark作业。