无法写入Hadoop DFS目录模式775组权限UserGroupInformation

时间:2015-12-22 15:00:02

标签: linux hadoop hdfs

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

问题在于我无法写入模式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

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

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

请提前帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

hadoop.security.group.mapping(如here所述)的定义是:

  

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

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

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