【问题标题】:Cannot write to Hadoop DFS directory mode 775 group permission UserGroupInformation无法写入 Hadoop DFS 目录模式 775 组权限 UserGroupInformation
【发布时间】:2015-12-22 15:00:02
【问题描述】:

我在启用了文件系统权限的私有集群上运行 Hadoop 2.6.2。集群有密码文件,只有像 hadoop 这样的系统用户,没有个人账户。我正在从具有像我这样的个人帐户('clott')的 linux 边缘节点访问 DFS。

问题是我无法写入模式 775 和组 hadoop 的 DFS 目录(“共享”);边缘节点向我展示了 hadoop 组的成员。我以为会使用边缘节点上的用户组成员资格,但不是吗?这是我看到的:

clott@edge$ id
uid=1003(clott) gid=1003(clott) groups=1003(clott),27(sudo),1001(hadoop)

clott@edge$ hdfs dfs -ls /user/hadoop
Found 3 items
drwxr-xr-x   - hadoop hadoop          0 2015-12-03 16:55 /user/hadoop/DistributedShell
drwxrwxr-x   - hadoop hadoop          0 2015-12-22 09:25 /user/hadoop/shared

clott@edge$ hdfs dfs -mkdir /user/hadoop/shared/foo
mkdir: Permission denied: user=clott, access=WRITE, inode="/user/hadoop/shared":hadoop:hadoop:drwxrwxr-x

我检查了名称节点并在其日志中发现了这个警告:

2015-12-22 09:32:40,941 WARN org.apache.hadoop.security.UserGroupInformation: No groups available for user clott

这是有道理的 - 名称节点不授予我访问权限,因为它不为我识别任何组。

那么名称节点是如何找到组成员的呢?一些谷歌搜索似乎建议我必须将我的用户名和各种组添加到 cluster 但这听起来不对。当然,如果我将 DFS 目录模式设置为 777,这将有效,但这是不对的。

请帮忙,提前谢谢。

【问题讨论】:

  • 嘿匿名的反对者,不如在这里添加评论并提出反对意见?

标签: linux hadoop hdfs


【解决方案1】:

hadoop.security.group.mapping(写成here)的定义是:

ACL 的用户到组映射(获取给定用户的组)的类。 默认实现, org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback,将 确定 Java 本机接口 (JNI) 是否可用。如果 JNI 是 可用的实现将使用 hadoop 中的 API 来解决 用户的组列表。如果 JNI 不可用,则 shell 使用 ShellBasedUnixGroupsMapping 实现。这个 使用 bash 执行到 Linux/Unix 环境 -c groups 命令为用户解析组列表。

要实现您的目标,您需要在 NameNode 机器上添加您的用户帐户 (clott) 并将其添加到那里的 hadoop 组。

如果您要与您的用户一起运行 MapReduce,您还需要在 NodeManager 主机上配置您的用户帐户。

【讨论】:

  • 将我的帐户添加到 NameNode 解决了 DFS 中的组权限问题 - 谢谢@facha。但是,即使在将我的帐户添加到所有节点之后,map-reduce 作业仍然失败。例如:/home/hadoop/hadoop-2.6.2/bin/yarn jar /home/hadoop/hadoop-2.6.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.2.jar pi 2 10
猜你喜欢
  • 2017-01-31
  • 2010-11-18
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 2011-06-14
  • 2010-10-08
相关资源
最近更新 更多