Apache spark 以指定的Linux用户身份运行Spark executors
我有一个spark独立集群,有5个节点。所有节点都通过nfs装载了相同的卷。这些装载中的文件具有特定的linux文件权限 当我Spark以用户x的身份提交作业(该用户在所有节点上都可用,并且在所有节点上都具有相同的uid)时,我希望Spark执行器也以用户x的身份运行,以便作业只能访问用户x有权访问的文件 我没有Kerberos,也没有HDFS 在该设置中是否可以执行此操作?Apache spark 以指定的Linux用户身份运行Spark executors,apache-spark,nfs,Apache Spark,Nfs,我有一个spark独立集群,有5个节点。所有节点都通过nfs装载了相同的卷。这些装载中的文件具有特定的linux文件权限 当我Spark以用户x的身份提交作业(该用户在所有节点上都可用,并且在所有节点上都具有相同的uid)时,我希望Spark执行器也以用户x的身份运行,以便作业只能访问用户x有权访问的文件 我没有Kerberos,也没有HDFS 在该设置中是否可以执行此操作? 使用纱线会有帮助吗 一直在玩Spark Standalone、Thread、HDFS等游戏的人。 我的经验告诉我: S
使用纱线会有帮助吗 一直在玩Spark Standalone、Thread、HDFS等游戏的人。
我的经验告诉我:
- Spark Standalone绝对没有任何形式的访问控制或监管
- 不带HDFS的Thread是可能的,但您的作业将始终作为Thread运行,如果您将文件写入HDFS以外的其他内容,则文件将归Thread用户所有
- Kerberos并不是这种用法的解决方案,HDFS/thread可以协同工作,如果您使用Kerberos作为spark运行作业并在HDFS中写入文件,那么这些文件将属于spark。如果对NFS或任何其他分布式文件系统执行相同操作,则文件将属于用于运行Thread的系统用户
- 最后,您可能能够缓解Ranger或Livy的一些问题,但在HDFS之外编写的文件将属于编写它们的系统用户
与NFS相比,HDFS的维护非常复杂。Spark Standalone不支持身份验证(当客户端连接到主机以提交作业时),也不支持模拟(当工作人员为作业生成驱动程序和执行者时)。换句话说,访问NFS数据的Linux用户将是运行Workers的任何服务帐户,通常是
spark
(或者root
,如果你很邋遢的话)。好吧,唯一支持模拟而不进行身份验证的执行框架是Thread——你只要“假装”是Linux用户xyz
(在运行spark submit
之前,使用export HADOOP\u USER\u NAME=xyz
)和Thread将在该帐户下生成作业容器。使用Thread+Kerberos,您不能假装,您必须实际拥有有效的Kerberos票证来证明您的身份。但如果您“是”HADOOP配置中定义的特权代理用户(通常oozie
hue
knox
齐柏林飞艇livy
)您可以请求Thread为任何Linux帐户运行作业(因为假定您是在正确身份验证后为该用户运行会话的web服务,例如LDAP用户/密码)使用Kubernetes,您可以进行某种身份验证……但无论如何,您不会使用NFS,而是使用某种与S3兼容的存储,Kubernetes提供与经过身份验证的用户相关的S3“机密”。