HDFS的Java操作

该文详细介绍了如何在Java环境中搭建HDFS操作的开发环境,包括创建Maven项目,添加Hadoop客户端依赖,获取客户端对象以及执行HDFS的文件操作,如创建目录、下载和上传文件、删除文件以及列举文件。
摘要由CSDN通过智能技术生成

1.1 搭建开发环境

1.2 创建maven项目

1.3 加入依赖

Maven仓库网址 https://mvnrepository.com/

    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>3.3.2</version>
    </dependency>

1.4 获取api中的客户端对象

在java中操作HDFS,首先要获得一个客户端实例

Configuration conf = new Configuration()
FileSystem fs = FileSystem.get(conf)

我们的操作目标是HDFS,所以获取到的fs对象应该是DistributedFileSystem的实例;

get方法是从何处判断具体实例化那种客户端类呢? ——从conf中的一个参数 fs.defaultFS的配置值判断;

如果我们的代码中没有指定fs.defaultFS,并且工程classpath下也没有给定相应的配置,conf中的默认值就来自于hadoop的jar包中的core-default.xml,默认值为: file:///,则获取的将不是一个DistributedFileSystem的实例,而是一个本地文件系统的客户端对象

1.5 HDFS客户端操作数据代码示例

文件的增删改查

package Bigdata.Hdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;

public class HdfsCommand {
    FileSystem fs;
    /*
      初始化FileSystem文件操作系统类
     */
    //try catch语句捕捉异常语句并处理
    //连接hadoop配置,
    //Before是每执行一次下面操作先执行这个
    @Before
    public void init() {
        Configuration conf = new Configuration();
        try {
            URI uri = new URI("hdfs://master:9000");
            String user = "hd";
            fs = FileSystem.get(uri, conf, user);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    //新建一个目录,目录名为out
    //hdfs dfs -mkdir /out
    @Test
    public void mkdir() {
        Path path = new Path("/out");
        try {
            fs.mkdirs(path);
            System.out.println("创建完成...");
            fs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    //从hadoop下载一个文件,保存当前目录
    //hdfs dfs -get /hello.txt .
    @Test
    public void get() {
        Path src = new Path("/hello.txt");
        //下载到当前目录
        Path dst = new Path(".");
        try {
            fs.copyToLocalFile(src, dst);
            System.out.println("下载完成...");
            fs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    //上传hello.txt文件到 hadoop的out目录中
    //hdfs dfs -put hello.txt /out
    @Test
    public void put() {
        Path src = new Path("hello.txt");
        Path dst = new Path("/out");
        try {
            fs.copyFromLocalFile(src, dst);
            System.out.println("上传完成...");
            fs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    //在Hadoop上删除一个out目录下的hello.txt的文件
    //hdfs dfs -rm /out/hello.txt
    @Test
    public void delete() {
        Path src = new Path("/out/hello.txt");
        try {
            fs.delete(src, true);
            System.out.println("删除完成...");
            fs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    //例举hadoop中的所有目录文件,这个是没有进行遍历的
    //hdfs dfs -ls /
    @Test
    public void list() throws IOException {
        Path path = new Path("/");
        RemoteIterator<LocatedFileStatus> it = fs.listLocatedStatus(path);
        while (it.hasNext()) {
            LocatedFileStatus status = it.next();
            System.out.println("------> " + status.getPath());
        }
        fs.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值