解决HDFS目录无法创建777权限

  • Post author:
  • Post category:其他


  • 通过API创建目录
  • 检查目录权限
  • 填坑思路
  • 处理方法

(一) 通过API创建目录

用JAVA代码调用HADOOP API创建目录,代码如下:

public class HdfsOps {

/**

* Public static function

*/

public static FileSystem iniConf() {


FileSystem fs = null;

try {


Configuration configuration = new Configuration();

fs = FileSystem.get(configuration);

} catch (Exception e) {

}

return fs;

}

/**

* Make dir with permission

*/

public static void MkdirHdfs() throws IOException {


Path path = new Path(“/data/test”);

FsPermission permission = new FsPermission(FsAction.ALL, FsAction.ALL, FsAction.ALL);    #  全部权限(777)

boolean mkdirs = iniConf().mkdirs(path, permission);

System.out.println(mkdirs);

}

public static void main(String[] args) throws Exception {

MkdirHdfs();

}

}

(二)查看目录权限

#> hdfs dfs -ls /data

会发现/data 目录下的test目录的权限是755(drwxr-xr-x), 填坑由此而来

(三) 填坑思路

查看HDFS的umask

#>  hdfs getconf -confkey fs.permissions.umask-mode

打印结果是022, 缘由在此处产生(777-022=755)

(四) 处理方法

  1. 1.在公共方法iniConf中添加配置设置代码如下

public static FileSystem iniConf() {


FileSystem fs = null;

try {


Configuration configuration = new Configuration();



configuration.set(“fs.permissions.umask-mode”, “000”);



fs = FileSystem.get(configuration);

} catch (Exception e) {


}

return fs;

}

  1. 2. 在项目根目录下创建core-site.xml文件,配置umask,配置如下

<?xml version=”1.0″ encoding=”UTF-8″?>

<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>

<configuration>

<property>

<name>fs.permissions.umask-mode</name>

<value>000</value>

</property>

</configuration>



版权声明:本文为lonewolf1992原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。