是否可以向纱线群集提交火花作业,并使用命令行或在罐子内部选择哪个用户将拥有"这份工作?
spark-submit将从包含用户的脚本启动。
PS:如果集群有kerberos配置(并且脚本是密钥表),它仍然可能吗?
答案 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.users
或hadoop.proxyuser.svc_spark_prd.groups
列出允许svc_spark_prd
冒充的用户或组。允许使用*
,但不建议任何用户/组使用。{p>
还要检查documentation on proxy authentication。
例如,Apache Livy使用此方法代表其他最终用户提交Spark作业。