* 通过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.在公共方法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;
}

 

* 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>