以指定的 Linux 用户身份运行 Spark 执行程序

Posted

技术标签:

【中文标题】以指定的 Linux 用户身份运行 Spark 执行程序【英文标题】:Run Spark executors as specified Linux user 【发布时间】:2020-02-22 09:38:23 【问题描述】:

我有一个具有 5 个节点的 spark 独立集群。所有节点都通过 nfs 挂载了相同的卷。这些挂载中的文件具有一定的linux文件权限。

当我以用户 x(在所有节点上都可用并且在所有节点上具有相同的 uid)的身份 Spark 提交我的作业时,我希望 spark 执行器也以用户 x 身份运行,以便作业只能访问文件用户x 有权限。

我没有 Kerberos,也没有 HDFS。

在这个设置中这可能吗? 使用 YARN 会有帮助吗?

【问题讨论】:

Spark Standalone 不支持身份验证(当客户端连接到 Master 以提交作业时)也不支持模拟(当工作人员为作业生成驱动程序和执行程序时)。换句话说,访问您的 NFS 数据的 Linux 用户将是运行 Workers 的任何服务帐户,通常是 spark(或者如果您马虎,则为 root)。 AFAIK,唯一支持在没有身份验证的情况下进行模拟的执行框架是 YARN——你只需“假装”成为 Linux 用户 xyz(在运行 export HADOOP_USER_NAME=xyz 之前使用 export HADOOP_USER_NAME=xyz),然后 YARN 就会生成该帐户下的作业容器。 使用 YARN + Kerberos 你不能假装,你必须有一个有效的 Kerberos 票证来证明你的身份。但是,如果您“是”在 Hadoop 配置中定义为这样的特权 代理用户(通常为 oozie hue knox zeppelin zeppelin livy),您可以请求 YARN 运行作业任何 Linux 帐户(因为您被假定为在经过适当身份验证后为该用户运行会话的 Web 服务,例如 LDAP 用户/密码) 使用 Kubernetes,您可以进行某种身份验证……但无论如何您都不会使用 NFS。而是某种与 S3 兼容的存储,Kubernetes 提供与经过身份验证的用户关联的 S3“秘密”。 【参考方案1】:

作为一个经常使用 Spark Standalone、Yarn、HDFS 等的人。 以下是我的经验告诉我的:

Spark Standalone 绝对没有任何形式的访问控制或监管。 可以使用没有 HDFS 的 Yarn,但您的作业将始终作为 Yarn 运行,如果您将文件写入 HDFS 以外的其他位置,则文件将归 yarn 用户所有。 Kerberos 不是这种使用的解决方案,HDFS/yarn 携手合作,如果您使用 kerberos 作为 spark 运行作业并在 HDFS 中写入文件将属于 spark。如果您对 NFS 执行相同操作,或者任何其他分布式文件系统文件将属于用于运行 Yarn 的系统用户。 最后,您或许能够缓解 Ranger 或 Livy 的一些问题,但在 HDFS 之外写入的文件将属于写入它们的系统用户。

我对这样一个问题的结论是,HDFS 是所有 Hadoop 生态系统的核心部分,不使用它是有问题的。 有点糟糕,因为与 NFS 相比,HDFS 维护起来真的很复杂。

【讨论】:

以上是关于以指定的 Linux 用户身份运行 Spark 执行程序的主要内容,如果未能解决你的问题,请参考以下文章

Linux用户和组管理及其相关命令

以指定用户身份从 php 运行 shell 脚本

Runas命令:能让域用户/普通User用户以管理员身份运行指定程序。

以不同用户身份运行 Linux 服务的最佳实践

无法以 root linux 用户身份运行 mysql 命令

用户和用户组