HDFS相关API操作

news2025/1/12 6:21:25

文章目录

    • API文档
    • 环境配置
    • API操作
      • 准备工作
      • 创建文件夹
      • 文件上传
      • 文件下载
      • 文件删除
      • 文件的更名和移动
      • 获取文件详细信息

API文档

HDFS API官方文档:https://hadoop.apache.org/docs/r3.3.1/api/index.html

环境配置

将Hadoop的Jar包解压到非中文路径(例如D:\hadoop\hadoop-2.7.2)

配置HADOOP_HOME环境变量

在这里插入图片描述

配置Path环境变量

在这里插入图片描述

API操作

准备工作

创建一个[Maven]工程HdfsClientDemo

引入hadoop-client依赖

<dependencies>
        <dependency>
            <grupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.2</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>

创建HdfsClient 类

创建文件夹

public class HdfsClient {
    //创建目录
    @Test
    public void testMkdir() throws URISyntaxException, IOException, InterruptedException {
        //连接的集群nn地址
        URI uri = new URI("hdfs://node1:8020");
        //创建一个配置文件
        Configuration configuration = new Configuration();
        //用户
        String user = "atguigu";
        //1、获取到了客户端对象
        FileSystem fileSystem = FileSystem.get(uri, configuration, user);
        //2、创建一个文件夹
        fileSystem.mkdirs(new Path("/xiyou/huaguoshan"));
        //3、关闭资源
        fileSystem.close();
    }
}

上面这样写代码有点冗余,我们通过AOP切面将初始化和关流的操作拆分出来,后续只需要关注核心逻辑就可以了。
实际开发中这样设计也不太好,建议搞个工厂类

public class HdfsClient {
    private FileSystem fs;
 
    @Before
    public void init() throws URISyntaxException, IOException, InterruptedException {
        // 连接的集群nn地址
        URI uri = new URI("hdfs://node1:8020");
        // 创建一个配置文件
        Configuration configuration = new Configuration();
        configuration.set("dfs.replication", "2");
        // 用户
        String user = "atguigu";
 
        // 1、获取到了客户端对象
        fs = FileSystem.get(uri, configuration, user);
    }
    
     @Test
    public void testMkdir() throws URISyntaxException, IOException, InterruptedException {
        //创建一个文件夹
        fs.mkdirs(new Path("/xiyou/huaguoshan2"));
    }


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

文件上传

@Test
 public void testPut() throws IOException {
    // 参数解读,参数1:表示删除原数据、参数2:是否允许覆盖、参数3:原数据路径、参数4:目的地路径
    fs.copyFromLocalFile(false, true, new Path("D:\\bigData\\file\\sunwukong.txt"), new Path("hdfs://node1/xiyou/huaguoshan"));
 }

文件下载

    //文件下载
    @Test
    public void testGet() throws IOException {
        //参数的解读,参数一:原文件是否删除、参数二:原文件路径HDFS、参数三:Windows目标地址路径、参数四:crc校验
//        fs.copyToLocalFile(false, new Path("hdfs://node1/xiyou/huaguoshan2/sunwukong.txt"), new Path("D:\\bigData\\file\\download"), false);
        fs.copyToLocalFile(false, new Path("hdfs://node1/xiyou/huaguoshan2/"), new Path("D:\\bigData\\file\\download"), false);
//      fs.copyToLocalFile(false, new Path("hdfs://node1/a.txt"), new Path("D:\\"), false);
    }

文件删除

//删除
@Test
public void testRm() throws IOException {
    //参数解读,参数1:要删除的路径、参数2:是否递归删除
    //删除文件
    //fs.delete(new Path("/jdk-8u212-linux-x64.tar.gz"),false);

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

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

文件的更名和移动

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

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

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

获取文件详细信息

    //获取文件详细信息
    @Test
    public void fileDetail() throws IOException {
        //获取所有文件信息
        RemoteIterator<LocatedFileStatus> listFiles = fs.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));
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1373192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云实时计算企业级状态存储引擎 Gemini 技术解读

本文整理自阿里云 Flink 存储引擎团队李晋忠&#xff0c;兰兆千&#xff0c;梅源关于阿里云实时计算企业级状态存储引擎 Gemini 的研究&#xff0c;内容主要分为以下五部分&#xff1a; 流计算状态访问的痛点企业级状态存储引擎GeminiGemini 性能评测&线上表现结语参考 一、…

手机直连卫星及NTN简介

一、手机直连卫星的发展现状 近日&#xff0c;华为推出了支持北斗卫星短报文的Mate 50旗舰机、P60系列&#xff0c;苹果也跟Globalstar&#xff08;全球星&#xff09;合作推出了支持卫星求救的iPhone14&#xff0c;最亮眼的还是华为的。这几款产品揭开了卫星通信探索消费领域…

JAVA基础学习笔记-day16-网络编程

JAVA基础学习笔记-day16-网络编程 1. 网络编程概述1.1 软件架构1.2 网络基础 2. 网络通信要素2.1 如何实现网络中的主机互相通信2.2 通信要素一&#xff1a;IP地址和域名2.2.1 IP地址2.2.2 域名 2.3 通信要素二&#xff1a;端口号2.4 通信要素三&#xff1a;网络通信协议 3. 谈…

点割集、边割集

点割集&#xff1a;对图G来说删去点割集的真子集&#xff0c;依旧连通。也就是说&#xff0c;点割集是删去使得图从连通变成非连通的最小节点的集合。 边割集&#xff1a;对图G来说删去边割集的真子集&#xff0c;依旧连通。也就是说&#xff0c;点割集是删去使得图从连通变成…

【小白专用】C# 连接 MySQL 数据库

C# – Mysql 数据库连接 1. 配置环境 #前提&#xff1a;电脑已安装Mysql服务&#xff1b; Visual Studio 安装Mysql依赖库&#xff1a; 工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet程序包 —> 搜索&#xff0c; 安装Mysql.Data (Oracle); (安装成功后&…

建立四叉树[中等]

一、题目 给你一个n * n矩阵grid&#xff0c;矩阵由若干0和1组成。请你用四叉树表示该矩阵grid。你需要返回能表示矩阵grid的四叉树的根结点。四叉树数据结构中&#xff0c;每个内部节点只有四个子节点。此外&#xff0c;每个节点都有两个属性&#xff1a; 【1】val&#xff1…

阿里云c8i服务器CPU性能、架构及费用测评

阿里云第八代云服务器ECS计算型c8i实例&#xff0c;CPU采用Intel Xeon Emerald Rapids或者Intel Xeon Sapphire Rapids&#xff0c;主频不低于2.7 GHz&#xff0c;全核睿频3.2&#xff0c;阿里云百科aliyunbaike.com分享阿里云c8i服务器CPU处理器型号、存储、网络、安全、使用场…

网络协议与攻击模拟_03实施ARP欺骗和攻击

一、ARP攻击 1、实验环境 kali Linux &#xff08;安装arpspoof工具&#xff09;被攻击主机 2、kali配置 kali Linux系统是基于debian Linux系统&#xff0c;采用deb包管理方式&#xff0c;可以使用apt源的方式进行直接从源的安装。 配置kali网络源 vim /etc/apt/sources…

(树木/道路/建筑)点云实验数据,包括pcd,ply,las,txt格式

&#xff08;树木/道路/建筑&#xff09;点云实验数据&#xff0c;包括pcd,ply,las,txt格式 一、介绍1.下载&#xff08;百度网盘&#xff09; 一、介绍 因为一直有朋友问数据&#xff0c;其实有很多的公开数据集可以使用&#xff0c;可能刚开始学习不习惯找吧&#xff0c;所以…

冲刺2024年AMC8模拟题:往年真题限时练一练和答案详解(4)

今天距离2024年AMC8正式比赛还有一周时间了&#xff0c;很多城市的中小学已经基本上放假了&#xff0c;所以参加AMC8竞赛的同学&#xff0c;可以在将更多的时间用在冲刺AMC8竞赛备考了&#xff0c;寒假作业的时间接下来几天可以少一点&#xff0c;AMC8结束后可以再多一点。 今…

Python办公自动化 – 操作NoSQL数据库和自动化图像识别

Python办公自动化 – 操作NoSQL数据库和自动化图像识别 以下是往期的文章目录&#xff0c;需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自动…

CentOS 6 制作openssl 1.1.1w rpm包 —— 筑梦之路

参考资料&#xff1a; CentOS 7 制作openssl 1.1.1w 版本rpm包 —— 筑梦之路_centos7 openssl 1.1.1 rpm包-CSDN博客 直接上spec文件如下&#xff1a; Name: openssl Version: 1.1.1w Release: 1%{?dist} Summary: Utilities from the general purpose cryptography li…

科学和统计分析软件GraphPad Prism mac介绍说明

GraphPad Prism for Mac是一款科学和统计分析软件&#xff0c;旨在帮助研究者、科学家和学生更轻松地处理和可视化数据。 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件&#xff0c;适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试…

112.Qt中的窗口类

我们在通过Qt向导窗口基于窗口的应用程序的项目过程中倒数第二步让我们选择跟随项目创建的第一个窗口的基类, 下拉菜单中有三个选项, 分别为: QMainWindow、QDialog、QWidget如下图&#xff1a; 常用的窗口类有3个 在创建Qt窗口的时候, 需要让自己的窗口类继承上述三个窗口类的…

Hive基础题-1

别看我&#xff0c;不看答案我也不会写 正因为不会写&#xff0c;所以才要每天一练 本地hive练习题 SET hive.exec.mode.local.autotrue; -- 默认 false SET hive.exec.mode.local.auto.inputbytes.max50000000; SET hive.exec.mode.local.auto.input.files.max5; -- 默认 4# …

wpf的资源路径

1、手动命名空间 xmlns:share"clr-namespace:***;assembly**" 2、资源文件 Pack URI 编译到本地程序集内的资源文件的 pack URI 使用以下授权和路径&#xff1a; 授权&#xff1a;application:///。 路径&#xff1a;资源文件的名称&#xff0c;包括其相对于本地…

构建数字化美食未来:深入了解连锁餐饮系统的技术实现

在当今数字化时代&#xff0c;连锁餐饮系统的设计与开发已成为餐饮业成功经营的重要一环。本文将深入研究连锁餐饮系统的技术实现&#xff0c;结合代码演示&#xff0c;为技术开发者和餐饮业者提供深刻的理解。 1. 技术选型与系统架构 在开始设计开发前&#xff0c;首先要考…

python 爬虫 request get或post传参

爬虫传参 import requestsurl http://www.xxx# get 或 post 传参数据 data {"pageNo": 1652,"pageSize": 10, }headers {Cookie: ,Host: ,Origin: ,Referer: ,User-Agent: , }# get 请求 # res requests.get( # url, # paramsdata, # hea…

内存问题(三)——生成内存问题案例

一、系统非堆内存溢出问题排查 以下例子出自其他人案例&#xff0c;拿过来是为了学习排查问题思路&#xff0c;与解决思路。 1.1 现象描述 运单系统每隔一段时间&#xff0c;内存使用和CPU报警超出阈值85%&#xff0c;通过监控平台可以看到非堆内存持 续增加不回收 。导致频繁…

[笔记]学习做微信小程序

学习视频&#xff1a;前端微信小程序开发教程 本篇文章 只对关键内容笔记&#xff0c;用于自用。 这里写目录标题 注册、下载、安装我的小程序ID&#xff1a;wxe1fbd6939d8797d8我的小游戏ID&#xff1a;wx8b2c3e47ac9127b7开发者工具外观代理设置 创建第一个小程序主界面5个组…