在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命令显示掩码值的原因是什么。
帮我解决一下。
答案 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实现如何,应用程序都知道应用该逻辑。