HDFS相关API操作

文章目录

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动通信原理与关键技术学习之信道编解码(5)

先回顾调制的过程&#xff1a;调制就是对信号源的信息进行处理加到载波上&#xff0c;使其变为适合于信道传输的形式的过程&#xff0c;就是使载波随信号而改变的技术。 1.什么是IQ调制&#xff1f; 答&#xff1a;将数据分为两路&#xff0c;分别进行载波调制&#xff0c;两…

多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测

多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测 目录 多维时序 | Matlab实现RIME-HKELM霜冰算法优化混合核极限学习机多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-HKELM霜冰算法优化混合核极限学…

2024年中国杭州|网络安全技能大赛(CTF)正式开启竞赛报名

前言 一、CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的…

【开源】基于JAVA+Vue+SpringBoot的厦门旅游电子商务预订系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

redis复习笔记04(小滴课堂)

新版SpringBoot2.X项目创建 在线创建springboot项目选择web和redis依赖就行。 SpringBoot2.x整合Redis客户端单元测试 SpringDataRedis配置RedisTemplate介绍 1.编写配置文件 2.单元测试进行测试&#xff1a; 可以看到我们设置进的值&#xff0c;乱码后面会解决。 获取不到设…

网络正常运行时间监控工具

正常运行时间是衡量系统可靠性的指标&#xff0c;表示为机器工作和可用时间的百分比。当提到 IT 网络时&#xff0c;正常运行时间是衡量网络设备、网站和其他服务的可用性的指标。网络正常运行时间通常以百分位数来衡量&#xff0c;例如“五个 9”&#xff0c;这意味着系统在 9…

RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用RPA全球生态 2024-01-05 17:27 发表于河北

目前国内外研究人员对于RPA机器人在财务管理流程优化领域中的应用研究层出不穷&#xff0c;但现有研究成果主要集中在财务业务单一领域&#xff0c;缺乏财务管理整体流程一体化管控的研究。RPA机器人的功能绝非单一的财务业务处理&#xff0c;无论从自身技术发展&#xff0c;或…

如何使用vite框架封装一个js库,并发布npm包

前言介绍 最近&#xff0c;公司项目上需要把很多公用函数封装起来&#xff0c;作为一个公共的库使用。以前的做法是使用webpack或者Rollup。Rollup和Webpack都是常用的JavaScript模块打包工具&#xff0c;用于构建现代化的Web应用程序。但是&#xff0c;不管是webpack或者Roll…

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# …

docker 容器添加指定网络地址

docker 容器添加指定网络地址 在搭建halo博客时&#xff0c;准备让 halo、mysql8.1、nginx 三个容器在同一个网段中&#xff0c;并指定IP。 实现docker内部容器之间网络互通。 查看容器网络信息命令 docker inspect 容器名各容器部署成功后网络效果如下&#xff1a; nginx …

HCIP实验1

华子目录 实验拓扑实验要求实验步骤合理的划分网段配置IP地址RIP宣告路由全网可达&#xff08;V1与V2需相互兼容&#xff09;R2访问R7走R5访问R1为运营商&#xff0c;r1远程登录r2实际登录r7测试 实验拓扑 实验要求 实验步骤 合理的划分网段 配置IP地址 R1 R2 R3 R4 R5 …

国产化嵌入式AI芯片

中国在嵌入式AI芯片领域已经取得了显著进展&#xff0c;产生了许多有竞争力的品牌和产品。 以下是一些知名的中国嵌入式AI芯片品牌及其产品系列和特点&#xff1a; 华为海思&#xff08;HiSilicon&#xff09; 芯片系列&#xff1a;麒麟系列产品特点&#xff1a;麒麟系列在智能…

强化学习求解TSP(六):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

【刷题篇】动态规划(八)

文章目录 1、分割回文串 IV2、分割回文串 II3、最长回文子序列4、让字符串成为回文串的最少插入次数5、最长公共子序列6、不相交的线 1、分割回文串 IV 给你一个字符串 s &#xff0c;如果可以将它分割成三个 非空 回文子字符串&#xff0c;那么返回 true &#xff0c;否则返回…

浅谈WPF之Popup弹出层

在日常开发中&#xff0c;当点击某控件时&#xff0c;经常看到一些弹出框&#xff0c;停靠在某些页面元素的附近&#xff0c;但这些又不是真正的窗口&#xff0c;而是页面的一部分&#xff0c;那这种功能是如何实现的呢&#xff1f;今天就以一个简单的小例子&#xff0c;简述如…

车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 基本假设 4.2 运动学方程 5.完整工程文件 1.课题概述 车辆行驶控制运动学模型的matlab建模与仿真,仿真输出车辆动态行驶过程. 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB2022a .…

内存分区模型---C++

目录 内存分区模型1.1 程序运行前1.2 程序运行后1.2.1 new操作符 内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的&#xff1b;全局区&#xff1a;存放全局变量和静态变量以及常…

微服务自动化.etcd跨主机集群

目录 一、容器间内部通信 二、跨主机通信 1、直接路由 2、Pipework 3、Flannel ①、Flannel特点 三、环境搭建 ETCD版本问题 ①、修改配置文件 ②、api 2 使用方法 ③、 api 3 使用方法 4、 ETCD中保存网络信息 ①、使用v2版的set命令向ETCD中保存flannel覆盖网络信…

111.连接已终止的线程、线程分离、线程取消

一、连接已终止的线程 功能&#xff1a;和一个已经终止的线程进行连接 回收子线程的资源 这个函数是阻塞函数&#xff0c;调用一次只能回收一个子线程 参数&#xff1a;thread&#xff1a;需要回收的子线程的ID retval&#xff1a; 接收子线程推出时的返回值 返回值&#xff1a…

JVM基础(2)——JVM内存模型

一、简介 JVM会加载类到内存中&#xff0c;所以 JVM 中必然会有一块内存区域来存放我们写的那些类。Java中有类对象、普通对象、本地变量、方法信息等等各种对象信息&#xff0c;所以JVM会对内存区域进行划分&#xff1a; JDK1.8及以后&#xff0c;上图中的方法区变成了Metasp…