JAVA连接hdfs 操作

JAVA连接hdfs 操作

 //完整的一个连接hdfs 和操作步骤
    @Test
    public void test06() throws URISyntaxException, IOException, InterruptedException {
        //创建连接
        //获取主节点
        URI uri = new URI("hdfs://hadoop100:9000");
        Configuration entries = new Configuration();
        //连接的地址 参数  用户
        FileSystem root = FileSystem.get(uri, entries, "root");
        //操作hdfs
        //create 创建一个文件 Path 指定路径 String 类型
        root.create(new Path("/zlf.txt"));
        //关流
        root.close();
    }

通过远程连接工具操作查看

hdfs dfs -ls /存放的路径

上传一个文件到hdfs

 //这是单元测试的先行方法
    @Before
    public void befores() throws URISyntaxException, IOException, InterruptedException {
        //创建连接
        cfg = new Configuration();
        fs = FileSystem.get(new URI("hdfs://hadoop100:9000"), cfg, "root");
    }

    //这是单元测试的结束方法
    @After
    public void afters() throws IOException {
        //关流
        fs.close();
    }

之后操作就可以不用重复创建连接和关闭流

//上传文件
    @Test
    public void test07() throws IOException {
        //读取文件 输入流
        InputStream inputStream = new FileInputStream(new File("C:\\2.txt"));

        //写入文件 输出流
        FSDataOutputStream fsDataOutputStream = fs.create(new Path("zzz.txt"));

        //流复制
        IOUtils.copyBytes(inputStream, fsDataOutputStream, 2096);
        //关流
        fsDataOutputStream.close();
        inputStream.close();
    }

从hdfs 下载一个文件到windows

//下载文件
    @Test
    public void test08() throws IOException {
        //读取文件 输入流
        InputStream inputStream = fs.open(new Path("/zlf.txt"));

        //写入文件 输出流
        FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\Temp\\zlf.txt"));
        //流复制
        IOUtils.copyBytes(inputStream, fileOutputStream, 2096);
        //关流
        fileOutputStream.close();
        inputStream.close();
    }

Exception in thread “main” org.apache.hadoop.security.AccessControlException: Permission denied: user=ZLF, access=WRITE, inode="/test.txt":root:supergroup:drwxr-xr-x
权限不够问题

mian方法的接收参数
在这里插入图片描述

解决方法一
给当前用户改成root用户
在这里插入图片描述
打开后找到VM options 添加root用户

临时修改成root用户
-DHADOOP USER NAME=root
解决方法二
添加
System.setProperty(“HADOOP_USER_NAME”,“root”);
在这里插入图片描述
解决方法三
创建本地用户的同时直接指定文件的用户
在创建连接的时候就设置root用户
在这里插入图片描述
解决方法四
直接修改分布式存储系统的用户权限允许非root用户进行操作
在这里插入图片描述

dfs.permissions
false

在这里插入图片描述
上传成功查看hdfs中的文件权限

修改成功

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值