Hadoop FileSystem.mkdirs(path, permission) 忽略权限
Hadoop FileSystem.mkdirs(path, permission) ignores the permission
我正在尝试以编程方式在 hdfs 中创建目录。我需要该目录对所有用户都是可写的。所以我尝试像这样将 perissions 传递给 mkdirs:
Path dir = new Path("/tmp/mkdir-test");
fileSystem.mkdirs(dir, new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL));
然而,结果是我获得了具有 drwxr-xr-x
权限的目录。这似乎不是一些总体权限问题,因为如果我在下一行明确设置它们:
// For some reason the initial permissions are ignored
fileSystem.setPermission(dir, new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL));
目录按预期正确结束 drwxrwxrwx
。
为什么传递给 mkdirs
的权限不被接受?
尽管实际方法的 javadoc 没有提及任何内容,但静态方法 FileSystem.mkdirs(FileSystem, Path, FsPermission)
提供了一些解释:
Create a directory with the provided permission.
The permission of the
directory is set to be the provided permission as in setPermission,
not permission&~umask.
结果是标准 mkdirs
AND 给定权限与 umask。
静态实用程序方法作为 mkdirs
和 setPermission
的组合实现
我正在尝试以编程方式在 hdfs 中创建目录。我需要该目录对所有用户都是可写的。所以我尝试像这样将 perissions 传递给 mkdirs:
Path dir = new Path("/tmp/mkdir-test");
fileSystem.mkdirs(dir, new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL));
然而,结果是我获得了具有 drwxr-xr-x
权限的目录。这似乎不是一些总体权限问题,因为如果我在下一行明确设置它们:
// For some reason the initial permissions are ignored
fileSystem.setPermission(dir, new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL));
目录按预期正确结束 drwxrwxrwx
。
为什么传递给 mkdirs
的权限不被接受?
尽管实际方法的 javadoc 没有提及任何内容,但静态方法 FileSystem.mkdirs(FileSystem, Path, FsPermission)
提供了一些解释:
Create a directory with the provided permission. The permission of the directory is set to be the provided permission as in setPermission, not permission&~umask.
结果是标准 mkdirs
AND 给定权限与 umask。
静态实用程序方法作为 mkdirs
和 setPermission