使用webhdfs在GETFACL中未显示掩码值

时间:2016-05-24 05:16:55

标签: hadoop acl webhdfs

在Hadoop中,我启用了授权。我为目录设置了几个acl。

当我在hadoop bin中执行getfacl命令时,我可以看到掩码值。

hadoop fs -getfacl /Kumar

# file: /Kumar
# owner: Kumar
# group: Hadoop
user::rwx
user:Babu:rwx
group::r-x
mask::rwx
other::r-x

如果我使用webhdfs运行相同的命令,则掩码值不会显示。

http://localhost:50070/webhdfs/v1/Kumar?op=GETACLSTATUS

{
  "AclStatus": {
    "entries": [
      "user:Babu:rwx",
      "group::r-x"
    ],
    "group": "Hadoop",
    "owner": "Kumar",
    "permission": "775",
    "stickyBit": false
  }
}

在webhdfs中没有为GETFACL命令显示掩码值的原因是什么。

帮我解决一下。

1 个答案:

答案 0 :(得分:2)

HDFS实现POSIX ACL模型。链接的文档说明掩码条目持久保存到经典POSIX权限模型的组权限位。这样做是为了支持POSIX ACL的要求,并且还支持向chmod等现有工具的向后兼容性,这些工具不知道扩展的ACL条目。引用该文件:

  

在最小ACL中,组类权限与   拥有组权限。在扩展ACL中,组类可以   包含其他用户或组的条目。这导致了   问题:其中一些附加条目可能包含权限   不包含在拥有组条目中,因此拥有组条目   权限可能与组类权限不同。

     

这个问题是通过掩码输入来解决的。最小化   ACL,组类权限映射到拥有组条目   权限。使用扩展ACL,组类权限映射到   掩码条目权限,而拥有组条目仍然   定义拥有组权限。

     

...

     

当应用程序更改任何所有者,组或其他类时   权限(例如,通过chmod命令),相应的ACL条目   变化也是如此。同样,当应用程序更改权限时   一个ACL条目,映射到其中一个用户类,即权限   班级改变。

这与您的问题相关,因为这意味着掩码实际上不会作为扩展ACL条目保留。相反,它在权限位中。查询WebHDFS时,您已进行“原始”API调用以检索有关ACL的信息。运行getfacl时,您运行的应用程序会在该API调用之上对其他显示逻辑进行分层。 getfacl知道对于具有ACL的文件,组权限位被解释为掩码,因此它会相应地显示。

这不是WebHDFS特有的。如果应用程序通过NameNode的RPC协议调用getAclStatus,那么它将看到WebHDFS响应的等效内容。此外,如果您在getfacl URI上使用webhdfs://命令,那么该命令仍将显示掩码,因为无论FileSystem实现如何,应用程序都知道应用该逻辑。