实现java对HDFS的操作

一、创建文件

package cn.kgc.file;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class HDFSClientDemo {

    // 创建文件
    @Test
    public void testMkdir() throws IOException, URISyntaxException, InterruptedException {
       // 获取文件系统
        Configuration conf = new Configuration();
        // 添加属性
        // fs.defaultFS : 默认的文件管理系统
        //conf.set("fs.defaultFS","hdfs://192.168.199.130:9000");   // 连接到虚拟机  固定端口号

        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.199.130:9000"),conf,"root");
        // 获取文件系统
        // 通过FileSystem 下的fs对象进行一些操作
        //FileSystem fs = FileSystem.get(conf);

        // 测试创建一个文件夹
        fs.mkdirs(new Path("/test"));
        // 获取的是一个路径,所以不能是字符串形式,得new一个path


        // 关闭资源
        fs.close();
    }

在这里插入图片描述

二、上传文件到HDFS

 // 上传一个文件到HDFS
    @Test
    public void testPutFileToHDFS() throws URISyntaxException, IOException, InterruptedException {
        // 获取文件系统的链接
        Configuration conf = new Configuration();

        // 设置配置里的备份为1,正常备份设置是3
        // 执行顺序优先级:代码>resources中配置信息>jar包中的配置信息
        conf.set("dfs.replication","1");

        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.199.130:9000"),conf,"root");

        // 上传文件到hdfs
        // src(原文件位置)  des(目标文件位置)
        fs.copyFromLocalFile(new Path("D:\\codes\\mapreduce\\hadooptes\\HdfsClientDemo\\demo\\data\\hdfsdemo\\HDFSClientDemo.java"),
                new Path("/test")
        );

        // 删除文件的操作
       // fs.deleteOnExit(new Path("/test/HDFSClientDemo.java"));


        // 关闭资源
        fs.close();
    }

在这里插入图片描述

三、下载一个文件到本地

public void testGetFileFromHDFS () throws URISyntaxException, IOException, InterruptedException {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.199.130:9000"),conf,"root");

        fs.copyToLocalFile(false,new Path("/test"),
                new Path("D:\\codes\\mapreduce\\hadooptes\\HdfsClientDemo\\demo\\data\\hello2.txt"));

        // true相当于移动,hdfs上就删除没有了 false就是拷贝,hdfs上文件并不会消失
        // 等同于fs.moveToLocalFile();
        fs.close();
    }

给下载到指定路径的文件命名为hello.txt,还有一个是校验文件
此时是为false的情况
在这里插入图片描述
当为true时
在这里插入图片描述

三、列举文件信息

package cn.kgc.file;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class HDFSListFiles {
    @Test
    public void listFiles() throws URISyntaxException, IOException, InterruptedException {
        // 获取文件系统的链接
        Configuration conf = new Configuration();

        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.199.130:9000"),conf,"root");

        // 返回类型是一个可迭代的对象
        RemoteIterator<LocatedFileStatus> listfiles = fs.listFiles(new Path("/test"), true);

        // 对他进行遍历
        while (listfiles.hasNext()){  // 判断是否有内容
            // 判断是否有值
            LocatedFileStatus status = listfiles.next();     // 文件的状态(可以获取一些信息)
            System.out.println(status.getPath().getName());  // 获取它的路径下它的名称
            System.out.println(status.getLen());           // 获取长度
           // System.out.println(status.getBlockLocations());   // 获取Block块的位置信息
            System.out.println(status.getBlockSize());    // 获取Block块的大小
            System.out.println(status.getReplication());   // 获取副本数
            System.out.println(status.getGroup());   // 所在的一个组

            System.out.println("--------------------");
            BlockLocation[] blockLocations = status.getBlockLocations();
            for (BlockLocation blockLocation : blockLocations) {
                System.out.println(blockLocation.getHosts());   // 获取block块存在哪个节点(机器)上
                System.out.println(blockLocation.getLength());    // 获取Block块的长度信息
            }

        }

        fs.close();
    }
}

在这里插入图片描述
在这里插入图片描述

四、递归删除目录

fs应该有方法,可以在java中实现,暂时还没试过,后面更新。

hdfs dfs -rm -r /test

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值