• 使用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

  • 相关阅读:
    django中ckeditor富文本编辑器使用
    xadmin安装
    RabbitMQ应用示例
    windows下安装RabbitMQ
    第四章 面向对象
    第三章 模块
    git简单使用
    python中的装饰器
    Python 使用 argparse 开发命令行工具/获取命令行参数/子命令实现
    自动化运维工具 Ansible 安装、配置及使用
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12542122.html
Copyright © 2020-2023  润新知