【问题标题】:Hadoop setting fsPermission recursively to dir using JavaHadoop 使用 Java 将 fsPermission 递归设置为 dir
【发布时间】:2014-10-17 13:34:41
【问题描述】:

您好,我有一个测试程序,可以在此路径user/user1/data/app/type/file.gz 处将文件加载到 hdfs 中,现在该测试程序由多个用户多次运行。所以我想将文件权限设置为 rwx 以便任何人都可以删除这个文件。我有以下代码

fs.setPermission(new Path("user/user1/data"),new FsPermission(FsAction.ALL,FsAction.ALL,FsAction.ALL)) 

上面的行将drwxrwxrwx 提供给所有目录,但对于file.gz,它提供-rw-r--r-- 的权限,为什么会这样?由于这个原因,除了我之外的另一个用户无法通过测试程序删除这个文件。我可以通过测试程序删除文件,因为我有完整的权限。

请指导。我是 Hadoop 新手。提前致谢。

【问题讨论】:

    标签: java hadoop hdfs


    【解决方案1】:

    使用 FsShell API 解决了我的目录权限问题。这可能不是最佳方式,但由于我正在为测试代码解决它应该没问题。

          FsShell shell=new FsShell(conf);
          try {
            shell.run(new String[]{"-chmod","-R","777","user/usr1/data"});
          }
         catch (  Exception e) {
            LOG.error("Couldnt change the file permissions ",e);
            throw new IOException(e);
          }
    

    【讨论】:

      【解决方案2】:

      我认为Hadoop 没有提供Java API 以在您使用的版本中递归地提供权限。该代码实际上是授予目录user/user1/data 的权限,仅此而已。您最好使用FileSystem.listStatus(Path f) 方法列出目录中的所有文件并单独使用Filsystem.setPermission。它目前正在我的 2.0.5-alpha-gphd-2.1.0.0 集群上运行。

      但是从Hadoop 2.2.0 开始,一个新的构造函数

      FsPermission(FsAction u, FsAction g, FsAction o, boolean sb)

      正在提供。布尔字段可能是您想要的递归标志。但是文档(包括参数名称)太差了,无法推断出具体的东西。

      也请查看Why does "hadoop fs -mkdir" fail with Permission Denied?,尽管您的情况可能有所不同。 (在我的情况下,dfs.permissions.enabled 仍然正确)。

      【讨论】:

      • 供参考,sb参数设置粘滞位;它不是递归标志。
      【解决方案3】:

      我是在 scala 中写的,但我认为您可以轻松适应它:

      def changeUserGroup(user:String,fs:FileSystem, path: Path): Boolean ={
        val changedPermission = new FsPermission(FsAction.ALL,FsAction.ALL,FsAction.ALL, true)
        val fileList = fs.listFiles(path, true)
        while (fileList.hasNext()) {
          fs.setPermission(fileList.next().getPath(),changedPermission)
        }
          return true
        }
      

      您还必须为错误处理添加一个逻辑,我总是返回 true。

      【讨论】:

        猜你喜欢
        • 2012-09-10
        • 1970-01-01
        • 2011-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        相关资源
        最近更新 更多