2.3) HDFS 的 API java操作

1. 客户端环境准备

1.1下载资料包

我用阿里云盘分享了「hadoop-3.1.0」
链接:Hadoop在WIN环境传送门

1.2 配置 HADOOP_HOME 环境变量

在这里插入图片描述

1.3 配置 Path 环境变量。

注意:如果环境变量不起作用,可以重启电脑试试。
在这里插入图片描述
验证 Hadoop 环境变量是否正常。双击 winutils.exe,如果报如下错误。说明缺少微软运
更多 Java –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网行库(正版系统往往有这个问题)。再资料包里面有对应的微软运行库安装包双击安装即可。微软运行库传送门**
安装完微软库,运行项目如果报HADOOP_HOME的错重启下电脑就好啦。

在这里插入图片描述

2. java操作

2.1创建maven项目加入pom 依赖
 <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.3</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.30</version>
        </dependency>
    </dependencies>
2.2)在项目的 src/main/resources 目录下,新建一个文件,命名为“log4j.properties”,在文件中填入
log4j.rootLogger=INFO, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 
log4j.appender.logfile=org.apache.log4j.FileAppender 
log4j.appender.logfile.File=target/spring.log 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
2.3创建包和类

在这里插入图片描述
HdfsClient.class文件代码

package com.zrp.hdfs;

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


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

/**
 * @author 赵锐鹏
 * @date 2021/8/18 13:55
 */
public class HdfsClient {
    /* *
     * 客户端代码常见套路
     * 1.获取一个客户端对象
     * 2.执行相关的操作命令
     * 3.关闭资源
     *
     * HDFS zookeeper
     * */
    private FileSystem fileSystem;

    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        //连接的集群nn地址
        URI uri = new URI("hdfs://hadoop51:8020");
        //创建一个配置文件
        Configuration configuration = new Configuration();
        //优先级最高
        configuration.set("dfs.replication", "2");
        //用户
        String user = "root";

        //1.获取到客户端对象
        FileSystem fileSystem = FileSystem.get(uri, configuration, user);
    }

    @After
    public void close() throws IOException {
        //3关闭资源
        fileSystem.close();
    }

    /**
     * 创建一个目录
     */
    @Test
    public void testmkdir() throws IOException {
        //2.创建一个文件夹
        fileSystem.mkdirs(new Path("/test"));
    }

    /**
     * 上传一个文件
     * <p>
     * 参数优先级
     * hdfs-default.xml =>hdfs-site.xml =>在项目资源目录下的配置文件 => 代码里面的配置
     */
    @Test
    public void testPut() throws IOException {
        //参数1.删除原数据    参数2.是否运行覆盖   参数3.原数据路径   参数4,目标路径(win)
        fileSystem.copyFromLocalFile(false, false, new Path("D:\\sukukong.txt"), new Path("hdfs://hadoop52/test"));
    }


    /**
     * 下载一个文件
     */
    @Test
    public void testDownload() throws IOException {
        //参数1.源文件是否删除  2.源文件路径HDFS  3.目标地址路径(win)  参数4.是否开启校验(几乎不用)
        fileSystem.copyToLocalFile(true, new Path(""), new Path(""), true);
    }


    /**
     * 删除文件/文件夹
     */
    @Test
    public void testDelete() throws IOException {
        //参数解读 1.要删除的路径  2.是否递归删除
        //删除文件
        fileSystem.delete(new Path("/xiyou/jdk.tar.gz"), false);

        //删除空目录
        fileSystem.delete(new Path("/xiyou"), false);

        //删除非空目录
        fileSystem.delete(new Path("/jingou"), true);
    }


    /**
     * 文件更名和移动
     */
    @Test
    public void testMv() throws IOException {
        //参数解读 1.源文件路径  参2.目标文件路径
        //对文件名称的修改
        fileSystem.rename(new Path("/input/word.txt"), new Path("/input/ss.txt"));

        //文件移动和更名
        fileSystem.rename(new Path("/input/ss.txt"), new Path("/cls.txt"));

        //目录更名
        fileSystem.rename(new Path("/input"), new Path("/output"));
    }

    /**
     * 获取文件详细信息
     */
    @Test
    public void fileDetail() throws IOException {
        //获取所有文件信息
        RemoteIterator<LocatedFileStatus> listFiles = fileSystem.listFiles(new Path("/"), true);

        //遍历文件
        while (listFiles.hasNext()) {
            LocatedFileStatus fileStatus = listFiles.next();
            System.out.println("========" + fileStatus.getPath() + "=========");
            System.out.println(fileStatus.getPermission());
            System.out.println(fileStatus.getOwner());
            System.out.println(fileStatus.getGroup());
            System.out.println(fileStatus.getLen());
            System.out.println(fileStatus.getModificationTime());
            System.out.println(fileStatus.getReplication());
            System.out.println(fileStatus.getBlockSize());
            System.out.println(fileStatus.getPath().getName());

            // 获取块信息
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            System.out.println(Arrays.toString(blockLocations));
        }
    }


    /**
     * 判断是文件还是文件夹
     */
    @Test
    public void testIfFile() throws IOException {
        // 2 判断是文件还是文件夹
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
        for (FileStatus fileStatus : listStatus) {
            // 如果是文件
            if (fileStatus.isFile()) {
                System.out.println("是文件:" + fileStatus.getPath().getName());
            } else {
                System.out.println("是文件夹:" + fileStatus.getPath().getName());
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MM-BD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值