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());
            }
        }
    }
}

在这里插入图片描述

相关文章
|
6月前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
8月前
|
人工智能 监控 安全
API安全测试工具:数字经济的免疫防线
API安全面临漏洞盲区、配置错误与合规碎片三大挑战,传统手段难抵新型风险。破局需构建智能漏洞探针、配置审计中枢与合规映射引擎三位一体防御矩阵。Burp Suite、Noname Security、Traceable AI与板栗看板等工具助力企业实现自动化检测、精准响应与高效合规,打造API安全免疫体系。
|
7月前
|
XML 安全 测试技术
【干货满满】分享什么是API接口测试
API接口测试是验证应用程序编程接口功能、性能、安全性及兼容性的关键环节,通过模拟请求并验证响应结果,确保接口能正确处理各种输入和场景。测试内容涵盖功能验证、性能评估、安全防护、兼容性验证及系统可靠性。相比UI测试,API测试无需界面依赖,支持数据驱动与自动化,适用于持续集成流程。常见接口类型包括RESTful、SOAP和GraphQL API,广泛应用于电商、金融及社交平台,保障系统间数据交互的安全与高效。
|
8月前
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
5月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1050 3
|
6月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
822 11
|
6月前
|
Web App开发 测试技术 Linux
文件上传测试用例
测试一个文件上传组件,从客户端(Windows操作系统)向服务器端(Linux操作系统)上传一个图片文件(先选择要上传的文件,再点击【上传】按键进行上传),格式必须是JPG、PNG(大小写不敏感),文件大小必须控制在500M之内。上传后图片的名称不发生变化。请设计测试用例,测试这个文件上传组件。以下是针对文件上传组件的测试用例设计,主要涵盖了不同的上传场景,以确保组件在各种情况下都能正常工作
299 1
|
11月前
|
监控 测试技术 数据库连接
RunnerGo API 性能测试实战:从问题到解决的全链路剖析
API性能测试是保障软件系统稳定性与用户体验的关键环节。本文详细探讨了使用RunnerGo全栈测试平台进行API性能测试的全流程,涵盖测试计划创建、场景设计、执行分析及优化改进。通过电商平台促销活动的实际案例,展示了如何设置测试目标、选择压测模式并分析结果。针对发现的性能瓶颈,提出了代码优化、数据库调优、服务器资源配置和缓存策略等解决方案。最终,系统性能显著提升,满足高并发需求。持续关注与优化API性能,对系统稳定运行至关重要。
|
7月前
|
监控 安全 测试技术
API测试工具评测:Apipost与Apifox的优劣深度解读
本文对比了Apipost与Apifox在API设计、数据建模、代码生成、测试能力、协作权限、性能监控、插件生态、文档管理及安全合规等方面的差异。Apifox在专业性、自动化、扩展性及团队协作上表现更优,尤其适合中大型项目与复杂管理需求,而Apipost功能较基础,适用于轻量级使用场景。
|
7月前
|
JSON 安全 测试技术
什么是API接口测试?这可能是全网最全的教程了!
API 是应用程序间的“中间人”,用于实现通信和数据交换。随着微服务架构的普及,API 数量激增,其质量对系统稳定性至关重要。API 测试可验证功能、性能与安全性,帮助开发者在部署前发现并修复问题,提升系统可靠性。测试内容包括请求方法、URL、请求头、请求体、响应状态码与响应数据等。常用工具如 Postman、AREX 可辅助测试,确保 API 在不同场景下的正确性与稳定性。