zoukankan      html  css  js  c++  java
  • 使用JavaAPI创建目录和HDFS的权限问题

    package demo;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.junit.Test;
    
    /*
     * 使用HDFS的Java API创建一个目录
     * 
     * 权限的问题:
     * org.apache.hadoop.security.AccessControlException: Permission denied: 
     * user=lenovo, access=WRITE, inode="/folder1":root:supergroup:drwxr-xr-x
     * 
     * 四种办法解决:
     * 1、设置执行程序的用户是:root(HADOOP_USER_NAME)
     * 2、使用Java的-D参数: HADOOP_USER_NAME
     * 3、使用命令改变目录的权限:hdfs dfs -chmod 777 /folder2
     * 4、参数:dfs.permissions  ---> false
     */
    public class TestDemo1 {
    
        @Test
        public void test1() throws Exception{
            //办法一:设置执行程序的用户是:root
            System.setProperty("HADOOP_USER_NAME", "root");
            
            //指定NameNode地址
            Configuration conf = new Configuration();
            //如果要使用主机名,需要配置Windows的host文件
            //C:WindowsSystem32driversetchosts文件
            conf.set("fs.defaultFS", "hdfs://bigdata11:9000");
            
            /*
             * 还有一种写法:IP地址
             * conf.set("fs.defaultFS", "hdfs://192.168.157.11:9000");
             */
            
            //创建一个HDFS的客户端
            FileSystem client = FileSystem.get(conf);
            //创建目录
            client.mkdirs(new Path("/folder1"));
            
            //关闭客户端
            client.close();
        }
    }

    方法2:

    @Test
        public void test2() throws Exception{
            //指定NameNode地址
            Configuration conf = new Configuration();
            //如果要使用主机名,需要配置Windows的host文件
            //C:WindowsSystem32driversetchosts文件
            conf.set("fs.defaultFS", "hdfs://bigdata11:9000");
            
            /*
             * 还有一种写法:IP地址
             * conf.set("fs.defaultFS", "hdfs://192.168.157.11:9000");
             */
            
            //创建一个HDFS的客户端
            FileSystem client = FileSystem.get(conf);
            //创建目录
            client.mkdirs(new Path("/folder2"));
            
            //关闭客户端
            client.close();
        }

     


    方法3:

    @Test
        public void test3() throws Exception{
            //指定NameNode地址
            Configuration conf = new Configuration();
            //如果要使用主机名,需要配置Windows的host文件
            //C:WindowsSystem32driversetchosts文件
            conf.set("fs.defaultFS", "hdfs://bigdata11:9000");
            
            /*
             * 还有一种写法:IP地址
             * conf.set("fs.defaultFS", "hdfs://192.168.157.11:9000");
             */
            
            //创建一个HDFS的客户端
            FileSystem client = FileSystem.get(conf);
            //创建目录
            client.mkdirs(new Path("/folder2/folder3"));
            
            //关闭客户端
            client.close();
        }


     使用JavaAPI创建目录和HDFS的权限问题

     

    Java API

    通过 HDFS 提供的 JavaAPI,我们可以完成以下的功能:
    1. 在 HDFS 上创建目录
    2. 通过 FileSystemAPI 读取数据(下载文件)
    3. 写入数据(上传文件)
    4. 查看目录及文件信息
    5. 查找某个文件在 HDFS 集群的位置
    6. 删除数据
    7. 获取 HDFS 集群上所有数据节点信息

    (1)创建一个目录:mkdir ----> 告诉:权限的问题
    (2)上传数据、下载数据
    (3)查询数据的元信息
    依赖的jar包:
    /root/training/hadoop-2.7.3/share/hadoop/common
    /root/training/hadoop-2.7.3/share/hadoop/common/lib
    /root/training/hadoop-2.7.3/share/hadoop/hdfs
    /root/training/hadoop-2.7.3/share/hadoop/hdfs/lib

  • 相关阅读:
    20171012
    BZOJ[2563] 阿狸和桃子的游戏
    BZOJ[1028] [JSOI2007]麻将
    BZOJ[1972] [Sdoi2010]猪国杀
    BZOJ[1033] [ZJOI2008] 杀蚂蚁antbuster
    P5651 基础最短路练习题
    P3047 [USACO12FEB]Nearby Cows G
    P6190 魔法
    P2391 白雪皑皑 / BZOJ 2054 疯狂的馒头
    CSP 2020 J/S 初赛游记
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12542122.html
Copyright © 2011-2022 走看看