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

原文地址:https://www.cnblogs.com/JasonPeng1/p/12542122.html