Hadoop FileSystem mkdirs()在传递777时创建具有755权限的目录

时间:2017-02-02 11:06:22

标签: hadoop hdfs cloudera hadoop2 hortonworks-data-platform

下面的代码段中使用的文件系统对象是通过org.apache.hadoop.fs.FileSystem.get(Configuration conf)获得的。

下面传递的FsPermission对象是通过FsPermission.getDefault()获得的,即777。

public int mkdirs(Path f, FsPermission permission) {
    try {
      return fileSystem.mkdirs(f, permission) ? 0 : 1;
    } catch (IOException e) {
      LOG.error("Failed to execute 'mkdirs': " + e.getMessage());
    }
    return 1;
}

但是,即使传递了777,创建的结果目录也具有755权限。

这可能有什么不妥之处?

1 个答案:

答案 0 :(得分:1)

process umask几乎肯定会设置为022并屏蔽这些位。

Per the Wikipedia entry on umask

  

在计算中,umask是一个确定a的设置的命令   掩码,用于控制如何为新创建的文件权限设置   文件。它也可以指设置掩码的功能,或者它可以   引用掩码本身,正式称为文件模式   创作面具。掩码是一组位,每个位都受到限制   如何为新创建的文件设置相应的权限。该   可以通过调用umask命令来更改掩码中的位。

     

在UNIX中,每个文件都有一组控制谁可以阅读的属性,   写或执行它。当程序创建文件时,UNIX需要这样做   文件权限设置为初始设置。面具限制   权限设置。如果掩码的位设置为" 1",则表示该掩码   相应的初始文件权限将被禁用。有点设置为   " 0"在掩码中意味着相应的权限将是   由程序和系统决定。换句话说,面具   充当最后阶段的过滤器,剥离文件所需的权限   创建;每个位设置为" 1"脱掉它的相应的   允许。用户和程序稍后可能会更改权限   使用chmod。

     

每个程序(技术上称为进程)都有自己的掩码,并且是   能够使用函数调用更改其设置。 ...

umask设置为022(八进制),创建具有0777请求权限的内容将导致0755的最终权限。