Hadoop Spark作为另一个用户提交给Thread

Hadoop Spark作为另一个用户提交给Thread,hadoop,apache-spark,yarn,kerberos,Hadoop,Apache Spark,Yarn,Kerberos,有没有可能将spark作业提交给一个纱线集群,并通过命令行或jar内部选择哪个用户将“拥有”该作业 spark submit将从包含用户的脚本启动 PS:如果集群具有kerberos配置(并且脚本为keytab),是否仍然可能?如果您的用户存在,您仍然可以使用启动spark submit su$my_用户-c spark提交[…] 我不确定kerberos密钥表,但是如果您与这个用户进行kinit,它应该是好的 如果因为不需要密码而无法使用su,我邀请您查看以下答案: 对于非kerberized

有没有可能将spark作业提交给一个纱线集群,并通过命令行或jar内部选择哪个用户将“拥有”该作业

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


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

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

我不确定kerberos密钥表,但是如果您与这个用户进行kinit,它应该是好的

如果因为不需要密码而无法使用su,我邀请您查看以下答案:
对于非kerberized集群
在提交Spark作业之前导出HADOOP\u USER\u NAME=zorro

如果要在shell脚本的其余部分(或在交互式shell会话中)还原为默认凭据,请确保随后
取消HADOOP\u USER\u NAME

对于kerberized集群,模拟另一个帐户而不破坏其他作业/会话(可能取决于您的默认票证)的干净方法如下所示

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

对于非kerberized群集,您可以添加Spark配置,如下所示:

--conf spark.yarn.appMasterEnv.HADOOP_USER_NAME=<user_name>
--conf spark.warn.appMasterEnv.HADOOP\u用户名=
另一种(更安全的)方法是使用代理身份验证——基本上是创建一个服务帐户,然后允许它模拟其他用户

$ spark-submit --help 2>&1 | grep proxy
  --proxy-user NAME           User to impersonate when submitting the application.
假设Kerberized/secured集群

我提到它更安全,因为您不需要存储(和管理)所有需要模拟的L用户的键盘

要启用模拟,您需要在Hadoop端启用几个设置,以确定哪些帐户可以模拟哪些用户或组以及哪些服务器。假设您已经创建了
svc\u spark\u prd
服务帐户/用户

hadoop.proxyuser.svc\u spark\u prd.hosts
-允许提交模拟spark应用程序的服务器的完全限定域名列表<代码>*是允许的,但也不建议用于任何主机

还指定
hadoop.proxyuser.svc\u spark\u prd.users
hadoop.proxyuser.svc\u spark\u prd.groups
以列出允许模拟的用户或组<代码>*是允许的,但不建议任何用户/组使用

还有,看看


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

我将无法将su提交给其他用户。将启动spark submit的用户与www数据类似,因此su将不可能,并且它将能够执行kinit,因为它需要最终用户密码。启动spark作业的用户是所有者。su-c不会更改您的用户,只会以您选择的用户身份运行作业;编辑:好的,我修改了我的帖子,你可以看看,这个答案是可以的,尽管假设有人可以访问所有用户的所有键,你可能需要运行spark作业作为。。。这并不总是可行的,也不总是安全的。此外,管理密钥表可能是一场噩梦(例如,当用户更改密码时,该密钥表必须更改等)。一个更好的方法是使用
代理身份验证
-请参阅下面我的答案。
导出HADOOP\u USER\u NAME=HADOOP
与AWS EMR一起使用。您是否在
纱线客户端
纱线簇
模式下都测试了此功能?这对我不起作用,您能否添加到一些说明此功能的文档的链接?我在任何地方都找不到这个答案,尽管假设特权“代理”帐户在任何时候都不可供任何人使用——否则您没有身份验证。这是完全正确的。我们组织中的此类特殊服务帐户几乎被锁定(例如,它们不能有unix会话等),我们只使用它们在Kerberos中对Spark作业的此类模拟服务进行身份验证。与你的方法相比,你的方法假设有人可以访问所有用户的所有键盘(或者甚至可能是密码),你可能需要运行spark作业作为。。。这并不总是可行的,也不总是安全的。此外,管理密钥表可能是一场噩梦(例如,当用户更改密码时,该密钥表必须更改等)<代码>代理身份验证更安全哦,请不要再叫那种“我的”方法了。这是一种“不用管理员权限,自己解决自己的问题”的方法。另外,问题已经存在了2年——您确定Spark支持的代理帐户在那时已经存在吗???
代理用户
是在大约4年前的Spark 1.3.0版中通过此提交添加到Spark的-2015年2月:-)