【问题标题】:Get list of user who have access to a hdfs file using Spark - Java使用 Spark - Java 获取有权访问 hdfs 文件的用户列表
【发布时间】:2018-10-08 23:33:15
【问题描述】:

从一个用 Java 编写的 Spark 作业中,我试图获取所有有权访问特定 hdfs 文件的 linux/centos 用户的列表。

目前正在调试以下 Java 代码以获取信息:

result = Shell.execCommand("sudo","bash","-c","lid","-g","-n", fileOwnersGroup);

但它没有成功。它正在抛出:

sudo:不存在 tty,也没有指定 askpass 程序

尝试了各种选项,包括更新 /etc/sudoer 但没有成功。

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • 添加“在 shell 脚本中”或“在我的程序中”通常不足以使问题成为编程和开发问题。请出示您的 Java 代码并说明问题所在。
  • HDFS 不是 POSIX 文件系统。您的 HDFS “用户帐户”(通常)没有映射到 Linux 用户。 特别是如果您不使用 Kerberos
  • 是的,但如果我将它们映射,我们如何实现它。

标签: hadoop apache-spark hdfs


【解决方案1】:

FileStatus 对象具有 getOwner()getGroup() 方法。

您可以通过FileSystem 对象和Path 获取文件的状态。

例如,Spark Scala list folders in directory

但是,您将需要一些外部查询来查找哪些 Unix 帐户映射到一个组中。例如,此类操作通常由 LDAP 搜索控制。

它正在抛出 sudo: no tty present and no askpass program specified

显然问题是 sudo 提示输入密码,Spark 进程不应该能够在本地文件系统上执行提升的命令

【讨论】:

  • 使用相同的方法来获取所有者和组,但是一旦我有了组,我想获取属于该组的所有用户的列表。从 java 我使用下面的命令 result = Shell.execCommand("sudo","bash","-c","lid","-g","-n", fileOwnersGroup);但这行不通。
  • 您不需要sudo bash -c 来读取帐户信息。另外,您的 spark 应用程序实际上不应该以提升的权限运行。 Spark 是一个分布式执行框架,您无法控制执行器在哪个服务器上运行。用户/组映射超出了 Hadoop 项目的范围。如前所述,组管理通常由 LDAP 控制。要将 LDAP 同步到 unix 帐户,可以使用 sssd
  • 无论如何getent group ${group} 是你想要的命令,我相信
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 2013-03-26
  • 2023-03-03
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2015-06-12
相关资源
最近更新 更多