【问题标题】:Hadoop FileSystem mkdirs() creates directory with 755 permission when passed 777Hadoop FileSystem mkdirs() 在通过 777 时创建具有 755 权限的目录
【发布时间】:2017-02-02 11:06:21
【问题描述】:

下面sn-p中使用的fileSystem对象是通过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 权限。

这里有什么问题?

【问题讨论】:

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


    【解决方案1】:

    process umask 几乎可以肯定设置为022 并屏蔽位。

    Per the Wikipedia entry on umask:

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

    在 UNIX 中,每个文件都有一组属性来控制谁可以读取, 编写或执行它。当程序创建文件时,UNIX 要求 文件权限设置为初始设置。面具限制了 权限设置。如果掩码的某个位设置为“1”,则表示 相应的初始文件权限将被禁用。有点设置为 掩码中的“0”表示相应的权限将是 由程序和系统决定。换句话说,面具 充当最后阶段的过滤器,将权限剥离为文件 创建;设置为“1”的每个位都会删除其对应的 允许。用户和程序稍后可能会更改权限 使用 chmod。

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

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

    【讨论】:

    • 一个小说明:将文件写入HDFS时,OS层的客户端进程umask不是一个因素。相反,配置属性fs.permissions.umask-mode 控制umask。它的行为类似于传统的 POSIX umask,其默认值设置为 022,因此此答案在其他方面是正确的。谢谢!
    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2018-09-07
    • 2017-06-12
    • 2015-10-04
    相关资源
    最近更新 更多