Hadoop中HDFS的API操作、HDFS文件上传(测试参数优先级)、copyFromLocalFile参数解读、HDFS文件下载、文件更名和移动、删除文件和目录、文件详情查看、文件和文件夹判断

简介: Hadoop中HDFS的API操作、HDFS文件上传(测试参数优先级)、copyFromLocalFile参数解读、HDFS文件下载、文件更名和移动、删除文件和目录、文件详情查看、文件和文件夹判断

@[toc]

7.HDFS的API操作

7.2HDFS的API案例实操

7.2.1HDFS文件上传(测试参数优先级)

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

package com.summer.hdfs;

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

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

/**
 * @author Redamancy
 * @create 2022-08-15 17:59
 */


public class HdfsClient {
    private FileSystem fs;
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        //连接的集群nn地址
        URI uri = new URI("hdfs://hadoop102:8020");
        //创建一个配置文件
        Configuration configuration = new Configuration();
        //用户
        String user = "summer";
        //获取到了客户端对象
        fs = FileSystem.get(uri, configuration,user);
    }
    @After
    public void close() throws IOException {
        //关闭资源
        fs.close();
    }

    @Test
    public void testPut() throws IOException {
        //参数解读:
        // 参数一:表示删除原数据,为true表示上传完文件后,原数据文件将会删除;为false表示上传完文件后,原数据文件将不会删除;
        // 参数二:是否允许覆盖,为true表示不管目的地地址是否有同名的文件都会覆盖;
        // 为false表示目的地地址有同名的文件则报错org.apache.hadoop.fs.PathExistsException: `hdfs://hadoop102/xiyou/huaguoshan/sunwukong.txt': Target hdfs://hadoop102/xiyou/huaguoshan/sunwukong.txt already exists;
        // 参数三:原数据路径Windows;参数四:目的地路径HDFS
        fs.copyFromLocalFile(false,true,new Path("D:\\sunwukong.txt"),new Path("hdfs://hadoop102/xiyou/huaguoshan"));
    }
}

7.2.1.1copyFromLocalFile参数解读

//参数解读:
        // 参数一:表示删除原数据,为true表示上传完文件后,原数据文件将会删除;为false表示上传完文件后,原数据文件将不会删除;
        // 参数二:是否允许覆盖,为true表示不管目的地地址是否有同名的文件都会覆盖;
        // 为false表示目的地地址有同名的文件则报错org.apache.hadoop.fs.PathExistsException: `hdfs://hadoop102/xiyou/huaguoshan/sunwukong.txt': Target hdfs://hadoop102/xiyou/huaguoshan/sunwukong.txt already exists;
        // 参数三:原数据路径Windows;参数四:目的地路径HDFS

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.2.1.2副本个数

在这里插入图片描述

为什么这里的副本有三个,因为在下面设置的
在这里插入图片描述
参数优先级:服务器的自定义配置(hdfs-site.xml) >服务器的默认配置(hdfs-default.xml)

7.2.1.3将hdfs-site.xml拷贝到项目的resources资源目录下

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>dfs.replication</name>
         <value>1</value>
    </property>
</configuration>

在这里插入图片描述

如果创建的文件副本变为了1,则

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

参数优先级:在项目资源目录下的用户自定义配置文件(如在resources下创建的hdfs-site.xml,可以看上面的过程) >服务器的自定义配置(hdfs-site.xml) >服务器的默认配置(hdfs-default.xml)

7.2.1.4客户端代码中设置的值

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
为2,则参数优先级排序:(1)客户端代码中设置的值 >(2)在项目资源目录下的用户自定义配置文件(如在resources下创建的hdfs-site.xml,可以看上面的过程) >(3)服务器的自定义配置(hdfs-site.xml) >(4)服务器的默认配置(hdfs-default.xml)

7.2.2HDFS文件下载

package com.summer.hdfs;

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

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

/**
 * @author Redamancy
 * @create 2022-08-15 17:59
 */


public class HdfsClient {
    private FileSystem fs;
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        //连接的集群nn地址
        URI uri = new URI("hdfs://hadoop102:8020");
        //创建一个配置文件
        Configuration configuration = new Configuration();
        configuration.set("dfs.replication","2");
        //用户
        String user = "summer";
        //获取到了客户端对象
        fs = FileSystem.get(uri, configuration,user);
    }
    @After
    public void close() throws IOException {
        //关闭资源
        fs.close();
    }
    @Test
    public void testGet() throws IOException {
        //参数的解读:参数一:原文件是否删除;参数二:原文件路径HDFS;参数三:目标地址路径Windows;参数四:是否要校验CRC
        fs.copyToLocalFile(false,new Path("hdfs://hadoop102/xiyou/huaguoshan"),new Path("D:\\"),false);
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
CRC文件是一个校验文件,保证文件传输完整。

注意:如果执行上面代码,下载不了文件,有可能是你电脑的微软支持的运行库少,需要安装一下微软运行库。

7.2.3HDFS文件更名和移动

package com.summer.hdfs;

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

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

/**
 * @author Redamancy
 * @create 2022-08-15 17:59
 */


public class HdfsClient {
    private FileSystem fs;
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        //连接的集群nn地址
        URI uri = new URI("hdfs://hadoop102:8020");
        //创建一个配置文件
        Configuration configuration = new Configuration();
        configuration.set("dfs.replication","2");
        //用户
        String user = "summer";
        //获取到了客户端对象
        fs = FileSystem.get(uri, configuration,user);
    }
    @After
    public void close() throws IOException {
        //关闭资源
        fs.close();
    }
    //文件的更名和移动
    @Test
    public void testmv() throws IOException {
        //参数解读:参数一:原文件路径;参数二:目标文件路径
        //对文件名称的修改
        fs.rename(new Path("/testinput/word.txt"),new Path("/testinput/summer.txt"));

        //文件的更名和移动
        fs.rename(new Path("/testinput/summer.txt"),new Path("/after.txt"));
        
        //目录更名
        fs.rename(new Path("/testinput"),new Path("/testoutput"));
    }
}

在这里插入图片描述

7.2.3.1对文件名称的修改

核心代码:

fs.rename(new Path("/testinput/word.txt"),new Path("/testinput/summer.txt"));

在这里插入图片描述

在这里插入图片描述

7.2.3.2文件的更名和移动

核心代码:

 fs.rename(new Path("/testinput/summer.txt"),new Path("/after.txt"));

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

7.2.3.3目录更名

核心代码:

fs.rename(new Path("/testinput"),new Path("/testoutput"));

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

7.2.4HDFS删除文件和目录

package com.summer.hdfs;

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

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

/**
 * @author Redamancy
 * @create 2022-08-15 17:59
 */


public class HdfsClient {
    private FileSystem fs;
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        //连接的集群nn地址
        URI uri = new URI("hdfs://hadoop102:8020");
        //创建一个配置文件
        Configuration configuration = new Configuration();
        configuration.set("dfs.replication","2");
        //用户
        String user = "summer";
        //获取到了客户端对象
        fs = FileSystem.get(uri, configuration,user);
    }
    @After
    public void close() throws IOException {
        //关闭资源
        fs.close();
    }
    //文件删除
    @Test
    public void testRm() throws IOException {
        //参数解读:参数一:要删除的路径;参数二:是否递归删除
        //删除文件
        fs.delete(new Path("/hadoop-3.1.3.tar.gz"),false);

        //删除空目录
        fs.delete(new Path("/xiyou"),false);
        //删除非空目录
        fs.delete(new Path("/jinguo"),true);
    }
}

7.2.4.1删除文件

核心代码:

fs.delete(new Path("/hadoop-3.1.3.tar.gz"),false);

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

在这里插入图片描述

7.2.4.2删除空目录

核心代码:

fs.delete(new Path("/xiyou"),false);

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

在这里插入图片描述

7.2.4.3删除非空目录

核心代码:

fs.delete(new Path("/jinguo"),true);

在这里插入图片描述

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

7.2.5HDFS文件详情查看

查看文件名称、权限、长度、块信息

//获取文件详细信息
    @Test
    public void fileDetail() throws IOException {

        //获取所有文件信息
        RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("hdfs://hadoop102/"), 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.getReplication());
            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));
        }

在这里插入图片描述

=============hdfs://hadoop102/after.txt=============
rw-r--r--
summer
3
26
1659793848099
3
134217728
after.txt
[0,26,hadoop102,hadoop104,hadoop103]
=============hdfs://hadoop102/hadoop-3.1.3.tar.gz=============
rw-r--r--
summer
2
338075860
1660640604122
2
134217728
hadoop-3.1.3.tar.gz
[0,134217728,hadoop104,hadoop102, 134217728,134217728,hadoop103,hadoop102, 268435456,69640404,hadoop102,hadoop103]
=============hdfs://hadoop102/tmp/logs/summer/logs-tfile/application_1659955855387_0001/hadoop103_40403=============
rw-r-----
summer
3
66228
1659955977487
3
134217728
hadoop103_40403
[0,66228,hadoop102,hadoop104,hadoop103]
=============hdfs://hadoop102/tmp/logs/summer/logs-tfile/application_1659955855387_0001/hadoop104_43491=============
rw-r-----
summer
3
67455
1659955978021
3
134217728
hadoop104_43491
[0,67455,hadoop102,hadoop104,hadoop103]
=============hdfs://hadoop102/tmp/logs/summer/logs-tfile/application_1659963897517_0001/hadoop102_33697=============
rw-r-----
summer
3
32036
1659969846561
3
134217728
hadoop102_33697
[0,32036,hadoop102,hadoop104,hadoop103]
=============hdfs://hadoop102/tmp/logs/summer/logs-tfile/application_1659963897517_0001/hadoop104_42477=============
rw-r-----
summer
3
103855
1659969846884
3
134217728
hadoop104_42477
[0,103855,hadoop102,hadoop104,hadoop103]

Process finished with exit code 0

7.2.6HDFS文件和文件夹判断

package com.summer.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 Redamancy
 * @create 2022-08-15 17:59
 */


public class HdfsClient {
    private FileSystem fs;
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        //连接的集群nn地址
        URI uri = new URI("hdfs://hadoop102:8020");
        //创建一个配置文件
        Configuration configuration = new Configuration();
        configuration.set("dfs.replication","2");
        //用户
        String user = "summer";
        //获取到了客户端对象
        fs = FileSystem.get(uri, configuration,user);
    }
    @After
    public void close() throws IOException {
        //关闭资源
        fs.close();
    }
    //判断是文件夹还是文件
    @Test
    public void testFile() throws IOException {
        FileStatus[] listStatus = fs.listStatus(new Path("/"));

        for (FileStatus status : listStatus) {
            if (status.isFile()) {
                System.out.println("文件:" + status.getPath().getName());
            }else{
                System.out.println("目录:" + status.getPath().getName());
            }
        }
    }
}

在这里插入图片描述

相关文章
|
3月前
|
测试技术 API 项目管理
API测试方法
【10月更文挑战第18天】API测试方法
77 1
|
3月前
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
78 3
|
4天前
|
Web App开发 JSON 测试技术
API测试工具集合:让接口测试更简单高效
在当今软件开发领域,接口测试工具如Postman、Apifox、Swagger等成为确保API正确性、性能和可靠性的关键。Postman全球闻名但高级功能需付费,Apifox则集成了API文档、调试、Mock与自动化测试,简化工作流并提高团队协作效率,特别适合国内用户。Swagger自动生成文档,YApi开源但功能逐渐落后,Insomnia界面简洁却缺乏团队协作支持,Paw仅限Mac系统。综合来看,Apifox是国内用户的理想选择,提供中文界面和免费高效的功能。
|
1月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
102 34
|
1月前
|
JSON API 数据格式
淘系等商品评论Json数据格式参考,API接口测试
通过以上示例和说明,你可以了解淘系商品评论的JSON数据结构和如何使用相关API接口获取评论数据。在实际操作中,你需要参考具体的API接口文档和开放平台的相关说明进行配置和调用。
|
1月前
|
测试技术 API 数据库
淘宝商品详情高级版 (item_get_pro)API如何测试
要测试淘宝商品详情高级版API(item_get_pro),需先阅读API文档,注册开放平台账号,创建应用获取密钥,搭建测试环境,选择测试工具。测试时设计用例,配置工具,发送请求,验证响应,记录日志。注意安全和数据格式。
|
1月前
|
监控 数据管理 测试技术
API接口自动化测试深度解析与最佳实践指南
本文详细介绍了API接口自动化测试的重要性、核心概念及实施步骤,强调了从明确测试目标、选择合适工具、编写高质量测试用例到构建稳定测试环境、执行自动化测试、分析测试结果、回归测试及集成CI/CD流程的全过程,旨在为开发者提供一套全面的技术指南,确保API的高质量与稳定性。
|
2月前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
69 4
|
2月前
|
SQL 测试技术 API
如何编写API接口的自动化测试脚本
本文详细介绍了编写API自动化测试脚本的方法和最佳实践,涵盖确定测试需求、选择测试框架、编写测试脚本(如使用Postman和Python Requests库)、参数化和数据驱动测试、断言和验证、集成CI/CD、生成测试报告及维护更新等内容,旨在帮助开发者构建高效可靠的API测试体系。
|
2月前
|
安全 测试技术 API
如何实现API接口的自动化测试?
实现API接口的自动化测试涉及多个关键步骤:确定测试范围和目标、编写测试用例、选择自动化测试工具、搭建测试环境、编写测试脚本、执行测试、分析结果和回归测试。选择合适的工具和考虑团队熟悉度是成功的关键。常用工具包括Postman、JMeter和SoapUI。通过这些步骤和工具,可以有效提高测试效率和质量,确保API的稳定性和可靠性。

热门文章

最新文章