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 {//创建目录@Testpublic 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;@Beforepublic 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);}@Testpublic void testMkdir() throws URISyntaxException, IOException, InterruptedException {//创建一个文件夹fs.mkdirs(new Path("/xiyou/huaguoshan2"));}@Afterpublic void close() throws IOException {// 3、关闭资源fs.close();}}

文件上传

@Testpublic 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"));}

文件下载

    //文件下载@Testpublic 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"));
}

获取文件详细信息

    //获取文件详细信息@Testpublic 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.hqwc.cn/news/339016.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打包时,自动更新版本号,清空缓存

1.创建 addVersion.js 文件 let fs require(fs);function getPackageJson(){return JSON.parse(fs.readFileSync(./package.json)); } try{let packageJson getPackageJson();//把分割的数组项转成数字&#xff0c;不然拼接就是字符串拼接let arr packageJson.version.spl…

reactNative0.71版本的使用

开发环境配置 参考reactNative 官网 版本选中0.71 打包配置 1. IOS 打开项目 -> 进入ios目录->执行命令 pod install ->项目名称.xcworkspace -> 使用xcode打开->配置证书 证书配置截图如下 &#x1f4a1;tips&#xff1a;TARGETS目录下会有多个文件&#x…

试试这个开源神器 55K star! 开箱即用

还记得以前工作上遇到困难&#xff0c;会申请开发大神远程帮忙&#xff0c;那时候用的都是TeamViewer&#xff0c;但是随着TeamViewer的收费&#xff0c;这些都已成为过往。 今天我们推荐的开源项目就是让你可以轻松平替TeamViewer&#xff0c;一款远程桌面神器&#xff0c;本…

创新工具:2024年开发者必备的一款表格控件

前言 在现代工作环境中&#xff0c;信息的处理和管理是至关重要的。表格是一种常见的数据呈现和整理工具&#xff0c;被广泛应用于各行各业。然而&#xff0c;随着技术的不断发展&#xff0c;市场对表格控件的需求也越来越高。随着工作效率的重要性日益凸显&#xff0c;一款高…

1.10 Unity中的数据存储 JSON

一、介绍 Json是最常用也是目前用的比较多的一种&#xff0c;超轻量级&#xff0c;可便捷性使用&#xff0c;平时用到比较多的都是解析Json和往Json中添加数据、修改数据等等JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式&#xff0c;它基于ECMAScr…

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布————C++

目录 [NOIP2014 提高组] 生活大爆炸版石头剪刀布题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code调用函数的Code&#xff08;看起来简洁一点&#xff09;运行结果 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 …

Java进阶 1-3 枚举(switch的新特性)

目录 新特性&#xff1a;switch的箭头语法 新特性&#xff1a;switch中的case null 新特性&#xff1a;将switch作为表达式使用 在枚举中的实际应用 新特性&#xff1a;模式匹配 智能转型 模式匹配 违反里式替换原则 守卫 支配 sealed的使用 本笔记参考自&#xff1…

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

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

element表格数据,表头上(下)角标,html字符串渲染

1. 问题描述 在动态渲染的element表格中&#xff0c;表头和表中数据是一个含有html的字符串&#xff0c;需要渲染 2. 效果 3. 代码 const columns ref([{ text: 差值<sub>-3</sub> / 10<sup>-6</sup>℃<sup>-1</sup>, value: aallowEr…

简易实现 MyBatis 底层机制

MyBatis 大家好呀&#xff01;我是小笙&#xff0c;我中间有1年没有更新文章了&#xff0c;主要忙于毕业和就业相关事情&#xff0c;接下来&#xff0c;我会恢复更新&#xff01;我们一起努力吧&#xff01; 概述 MyBatis 是一个持久层的框架&#xff08;前身是 ibatis&#x…

5G阅信短信群发助力汽车行业营销拓客!

5G阅信短信群发在汽车行业营销中具有重要作用&#xff0c;可以帮助汽车企业快速触达目标客户群体&#xff0c;提高品牌知名度和销售业绩。以下是一些应用5G阅信短信群发助力汽车行业营销拓客的策略&#xff1a; 1.精准定位目标客户&#xff1a;通过分析客户 数据和行为&#xf…

计算机体系结构----计分板(scoreboard)算法

计分板算法简介 计分板记录着所有必要的信息&#xff0c;用来控制以下事情&#xff1a; 每条指令何时可以读取操作数并投入运行&#xff08;对应着RAW冲突的检测&#xff09;每条指令何时可以写入结果&#xff08;对应着WAR冲突的检测&#xff09;在计分板中&#xff0c;WAW冲…