hadoop02_HDFS的API操作

HDFS的API操作

1 HDFS 核心类简介

Configuration类:处理HDFS配置的核心类。

FileSystem类:处理HDFS文件相关操作的核心类,包括对文件夹或文件的创建,删除,查看状态,复制,从本地挪动到HDFS文件系统中等。

Path类:处理HDFS文件路径。

IOUtils类:处理HDFS文件读写的工具类。

2 HDFS文件处理类FileSystem的核心方法介绍:

1. FileSystem get(URI uri, Configuration conf)根据HDFSURI和配置,创建FileSystem实例2. public boolean mkdirs(Path f) throws IOException根据路径创建HDFS文件夹3. FSDataOutput Stream create(Path f, boolean overwrite)根据具体的路径创建文件,并且知名是否以重写的方式4. abstract boolean delete(Path f, boolean recursive)根据路径删除文件5. abstract FileStatus[] listStatus(Path f)根据路径,返回该路径下所有文件夹或文件的状态。6. Void moveFromLocalFile(Path src, Path dst)将本地路径下的文件,挪动到HDFS的指定路径下7. FSDataInputStream open(Path f)打开指定路径下的文件内容

3 执行流程

maven依赖

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.3.2</version></dependency></dependencies>

hdfs 创建文件夹

   public static void main(String[] args) throws IOException, Exception, URISyntaxException {Configuration conf = new Configuration();
//		conf.set("fs.defaultFS", "hdfs://hadoop102:9000");// 1 获取hdfs客户端对象
//		FileSystem fs = FileSystem.get(conf );FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), conf, "root");// 2 在hdfs上创建路径fs.mkdirs(new Path("/dir01/"));// 3 关闭资源fs.close();System.out.println("over");}

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

// 1 文件上传@Testpublic void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException{// 1 获取fs对象Configuration conf = new Configuration();conf.set("dfs.replication", "2");FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), conf , "root");// 2 执行上传APIfs.copyFromLocalFile(new Path("e:/info.txt"), new Path("/file1.txt"));// 3 关闭资源fs.close();}

2 HDFS文件下载

  // 2 文件下载@Testpublic void testCopyToLocalFile() throws URISyntaxException, IOException, InterruptedException {// 1 获取对象Configuration conf = new Configuration();// conf.set("dfs.replication", "2");FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), conf , "root");// 2 执行下载操作
//		fs.copyToLocalFile(new Path("/banhua.txt"), new Path("e:/banhua.txt"));fs.copyToLocalFile(false, new Path("/file1.txt"), new Path("e:/file2.txt"), true);// 3 关闭资源fs.close();}

3 HDFS文件夹删除

// 3 文件删除@Testpublic void testDelete() throws IOException, InterruptedException, URISyntaxException{// 1 获取对象Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), conf , "root");// 2 文件删除fs.delete(new Path("/dir01"), true);// 3 关闭资源fs.close();}

4 HDFS文件名更改

// 4 文件更名@Testpublic void testRename() throws IOException, InterruptedException, URISyntaxException{// 1 获取对象Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), conf , "root");// 2 执行更名操作fs.rename(new Path("/file1.txt"), new Path("/file111.txt"));// 3 关闭资源fs.close();}

5 HDFS文件详情查看

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

// 5 文件详情查看@Testpublic void testListFiles() throws IOException, InterruptedException, URISyntaxException{// 1 获取对象Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), conf , "root");// 2 查看文件详情RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);while(listFiles.hasNext()){LocatedFileStatus fileStatus = listFiles.next();// 查看文件名称、权限、长度、块信息System.out.println(fileStatus.getPath().getName());// 文件名称System.out.println(fileStatus.getPermission());// 文件权限System.out.println(fileStatus.getLen());// 文件长度BlockLocation[] blockLocations = fileStatus.getBlockLocations();for (BlockLocation blockLocation : blockLocations) {String[] hosts = blockLocation.getHosts();for (String host : hosts) {System.out.println(host);}}System.out.println("------ok分割线--------");}// 3 关闭资源fs.close();}

6 HDFS文件和文件夹判断

// 6 判断是文件还是文件夹@Testpublic void testListStatus() throws IOException, InterruptedException, URISyntaxException{// 1 获取对象Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), conf , "root");// 2 判断操作FileStatus[] listStatus = fs.listStatus(new Path("/"));for (FileStatus fileStatus : listStatus) {if (fileStatus.isFile()) {// 文件System.out.println("f:"+fileStatus.getPath().getName());}else{// 文件夹System.out.println("d:"+fileStatus.getPath().getName());}}// 3 关闭资源fs.close();}

4 HDFS的I/O流操作

上面我们学的API操作HDFS系统都是框架封装好的。那么如果我们想自己实现上述API的操作该怎么实现呢?
我们可以采用IO流的方式实现数据的上传和下载。

1 HDFS文件上传

1.需求:把本地e盘上的banhua.txt文件上传到HDFS根目录
2.编写代码

@Testpublic void putFileToHDFS() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), configuration, "root");// 2 创建输入流FileInputStream fis = new FileInputStream(new File("e:/hahaha.txt"));// 3 获取输出流FSDataOutputStream fos = fs.create(new Path("/hahaha.txt"));// 4 流对拷IOUtils.copyBytes(fis, fos, configuration);// 5 关闭资源IOUtils.closeStream(fos);IOUtils.closeStream(fis);fs.close();}

2 HDFS文件下载

1.需求:从HDFS上下载banhua.txt文件到本地e盘上
2.编写代码

@Testpublic void getFileFromHDFS() throws IOException, InterruptedException, URISyntaxException{// 1 获取文件系统Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://node1:9820"), configuration, "root");// 2 获取输入流FSDataInputStream fis = fs.open(new Path("/jinan/info/lenovo/hello.txt"));// 3 获取输出流FileOutputStream fos = new FileOutputStream(new File("e:/hello.txt"));// 4 流的对拷IOUtils.copyBytes(fis, fos, configuration);// 5 关闭资源IOUtils.closeStream(fos);IOUtils.closeStream(fis);fs.close();}

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

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

相关文章

【什么是反射机制?为什么反射慢?】

✅ 什么是反射机制&#xff1f;为什么反射慢&#xff1f; ✅典型解析✅拓展知识仓✅反射常见的应用场景✅反射和Class的关系 ✅典型解析 反射机制指的是程序在运行时能够获取自身的信息。在iava中&#xff0c;只要给定类的名字&#xff0c;那么就可以通过反射机制来获得类的所有…

jmeter性能测试监测性能——linux安装PerfMon Server Agent

前言 这些天有性能压测的任务&#xff0c;Darren洋特意整理了一下使用jmeter来进行性能压测时使用PerfMon Server Agent来进行服务器性能资源监控的步骤。 一、下载PerfMon Server Agent PerfMon Server Agent下载传送带&#xff1a; https://github.com/undera/perfmon-age…

vue和react的区别是什么

首先介绍一下什么是vue Vue是一个轻量级的前端框架&#xff0c;由尤雨溪于2014年开始开发。Vue采用了MVVM&#xff08;Model-View-ViewModel&#xff09;模式&#xff0c;通过数据双向绑定和组件化开发的方式&#xff0c;让前端开发更加简单、高效、可维护。 Vue的主要特点包…

【STM32】I2C通信

基本的任务是&#xff1a;通过通信线&#xff0c;实现单片机读写外挂模块寄存器的功能。其中至少要实现在指定位置写寄存器和在指定的位置读寄存器这两个功能。 异步时序的优点&#xff1a;省一根时钟线&#xff0c;节约资源&#xff1b;缺点&#xff1a;对事件要求严格&#…

python实现元旦多种炫酷高级倒计时_附源码【第19篇—python过元旦】

文章目录 &#x1f30d;python实现元旦倒计时 — 初级(控制台)⛅实现效果&#x1f30b;实现源码&#x1f31c;源码讲解 &#x1f30d;python实现元旦倒计时 — 中级(精美动态图)⛅实现效果&#x1f30b;实现源码&#x1f31c;源码讲解 &#x1f30d;python实现元旦倒计时 — 高…

Fireblock:为Dapp实现可编程隐私

1. 引言 Fireblock network为Cosmos生态应用链。并于2023年10月宣布完成pre-seed轮250万美金融资。 其定位为实现&#xff1a; 有条件解密可编程隐私 Fireblock使用的密码学方案有&#xff1a; distributed key generation&#xff08;DKG&#xff09;Identity-based encry…

Linux网络编程——Socket编程步骤及常用API

Sockt服务器和客户端的开发步骤 TCP connect()最好建立在listen()后&#xff0c;一旦监听到就建立连接。 UDP 常用API 包含头文件 #include<sys/types.h> #include<sys/socket.h>创建套接字&#xff08;连接协议&#xff09; 作用 用于根据指定的地址族、数据…

四、ensp配置ftp服务器实验

文章目录 实验内容实验拓扑操作步骤配置路由器为ftp server 实验内容 本实验模拟企业网络。PC-1为FTP 用户端设备&#xff0c;需要访问FTP Server&#xff0c;从服务器上下载或上传文件。出于安全角度考虑&#xff0c;为防止服务器被病毒文件感染&#xff0c;不允许用户端直接…

SpringBoot集成opencc4j实现繁体中文转为简体中文

背景 繁体中文转为简体中文的需求非常常见&#xff0c;特别是在中文语境下的文本处理和翻译应用中。有很多现成的工具和库可以实现这个功能&#xff0c;比如 OpenCC 、 HanLP 等。从网上下载的 MySQL 版诗词数据库中的诗词数据都是繁体字&#xff0c;这里使用 SpringBoot 集成…

【Python】python-hmac算法/urllib

hmac Hmac算法针对所有哈希算法都通用,无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。 Python自带的hmac模块实现了标准的Hmac算法。 >>> import hmac >>> message = bHello, world! >>> key = bsecr…

互联网上门洗衣洗鞋小程序优势有哪些?

互联网洗鞋店小程序相较于传统洗鞋方式&#xff0c;具有以下优势&#xff1b; 1. 便捷性&#xff1a;用户只需通过手机即可随时随地下单并查询&#xff0c;省去了许多不必要的时间和精力。学生们无需走出宿舍或校园&#xff0c;就能轻松预约洗鞋并取件。 2. 精准定位&#xff1…

代码随想录刷题题Day21

刷题的第二十一天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day21 任务 ● 216.组合总和III ● 17.电话号码的字母组合 1 组合总和III 216.组合总和III 思路&#xff1a; 在[1,2,3,4,5,6,…

vcomp120.dll缺失怎么解决,vcomp120.dll丢失的详细修复方法分享(总共5种方法)

计算机提示找不到vcomp120.dll&#xff0c;无法继续执行代码的5个解决方法和vcomp120.dll是什么以及vcomp120.dll丢失原因与作用解析 在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到vcomp120.dll&#xff0c;无法继续执行代码”。…

鱼眼标定方式

鱼眼作用 人单眼水平视角最大可达156度&#xff0c;垂直方向150度。为了增加可视范围&#xff0c;摄像头可以通过畸变参数扩大视野&#xff0c;一般100度到200度的fov。所以鱼眼是为了看的视野更大&#xff0c;注意在一定分辨率下&#xff0c;fov边缘的像素点稀疏&#xff0c;…

基于Springboot的宠物领养系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的宠物领养系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

嵌入式开发必须学习qt吗?

嵌入式开发必须学习qt吗&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「 嵌入式的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#…

【Linux】定时任务

定时任务常用crontab来定期执行程序。 crontab 基本语法 crontab [-u user] -l # 列出用户cron任务 crontab [-u user] -e # 编辑用户cron任务 crontab [-u user] -r # 移除用户cron任务cron 表达式 # 分 时 日 月 周 执行命令 minute hour day month week command # 示例…

详解—C++[智能指针]

目录 一、为什么需要智能指针&#xff1f; 二. 内存泄漏 2.1 什么是内存泄漏&#xff0c;内存泄漏的危害 2.2 内存泄漏分类 1.堆内存泄漏(Heap leak) 2.系统资源泄漏 2.3如何避免内存泄漏 三.智能指针的使用及原理 3.1 RAII 3.2 智能指针的原理 3.3 std::auto_ptr …

代码随想录算法训练营 | day60 单调栈 84.柱状图中最大的矩形

刷题 84.柱状图中最大的矩形 题目链接 | 文章讲解 | 视频讲解 题目&#xff1a;给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 1 < heights.len…

PHP调用淘宝/拼多多电商平台商品详情API接口的方法及实现

随着互联网、云计算和大数据时代的到来&#xff0c;越来越多的应用程序需要调用第三方的API接口来获取数据&#xff0c;实现数据互通和协同工作。PHP作为一种常用的服务器端语言&#xff0c;也可以通过调用API接口来实现不同系统的数据交互和整合。本文将介绍PHP调用API接口的方…