Hadoop——HDFS的Java API操作(文件上传、下载、删除等)

1、创建Maven项目

2、修改pom.xml文件

<dependencies><!-- Hadoop所需依赖包 --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.0</version></dependency><!-- junit测试依赖,因为我只想测试HDFS是否能正常使用 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
</dependencies>

3、添加四个配置文件

为避免运行的一些错误,我们将Hadoop的四个重要配置文件添加到resources中

4、创建测试文件JavaAPI

5、初始化

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;public class JavaAPI {// 可操作HDFS文件系统的对象FileSystem hdfs = null;// 测试方法执行前执行,用于初始化操作,避免频繁初始化@Beforepublic void init() throws IOException {// 构造一个配置参数对象,设置一个参数:要访问的HDFS的URIConfiguration conf = new Configuration();// 指定使用HDFS访问conf.set("fs.defaultFS","hdfs://localhost:9000");// 进行客户端身份的设置(root为虚拟机的用户名,hadoop集群节点的其中一个都可以)System.setProperty("HADOOP_USER_NAME","root");// 通过FileSystem的静态get()方法获取HDFS文件系统客户端对象hdfs = FileSystem.get(conf);}// 测试方法执行后执行,用于处理结尾的操作,关闭对象@Afterpublic void close() throws IOException {// 关闭文件操作对象hdfs.close();}
}

因为对文件的操作我们都需要获取hdfs对象和关闭对象,所以为避免重复编写,将两个操作对立成单独方法,分别在文件相应操作执行前和执行后执行。

这里"hdfs://localhost:9000"对应core-site.xml的配置

6、文件操作

可以在浏览器访问http://localhost:50070/,点击Browse the file system 查看HDFS文件系统的目录

文件上传

我提前在本地E:\hadoop下创建一个HDFSTest.txt文件

    // 上传文件到HDFS文件系统@Testpublic void testUploadFileToHDFS() throws IOException {// 待上传的文件路径(windows)Path src = new Path("E:/hadoop/HDFSTest.txt");// 上传之后存放的路径(HDFS)Path dst = new Path("/HDFSTest.txt");// 上传hdfs.copyFromLocalFile(src, dst);System.out.println("上传成功");}

文件下载

    // 从HDFS下载文件到本地@Testpublic void testDownFileToLocal() throws IOException {// 待下载的路径(HDFS)Path src = new Path("/HDFSTest.txt");// 下载成功之后存放的路径(windows)Path dst = new Path("E:/hadoop/HDFSTest1.txt");// 下载hdfs.copyToLocalFile(false,src,dst,true);System.out.println("下载成功");}

创建目录

    // 创建目录@Testpublic void testMkdirFile() throws IOException {// 待创建目录路径Path src = new Path("/HDFS");// 创建目录hdfs.mkdirs(src);System.out.println("创建成功");}

目录重命名

    // 重命名@Testpublic void testRenameFile() throws IOException {// 重命名之前的名字Path src = new Path("/HDFS");// 重命名之后的名字Path dst = new Path("/HDFS1");// 重命名hdfs.rename(src,dst);System.out.println("重命名成功");}

删除目录

    // 删除目录@Testpublic void testDeleteFile() throws IOException {// 待删除目录路径(HDFS)Path src = new Path("/HDFS1");// 删除hdfs.delete(src, true);System.out.println("删除成功");}

查看文件信息

    // 查看HDFS目录中的文件信息@Testpublic void testCheckFile() throws IOException {// 获取迭代器对象("/"表示获取全部目录下的文件)RemoteIterator<LocatedFileStatus> listFiles = hdfs.listFiles(new Path("/"), true);while (listFiles.hasNext()) {LocatedFileStatus fileStatus = listFiles.next();// 打印当前文件名System.out.println("文件名:" + fileStatus.getPath().getName());// 打印当前文件块大小System.out.println("文件块大小:" + fileStatus.getBlockSize());// 打印当前文件权限System.out.println("文件权限:" + fileStatus.getPermission());// 打印当前文件内容的长度System.out.println("文件内容长度:" + fileStatus.getLen());// 获取该文件块的信息(包含长度,数据块,DataNodes的信息)BlockLocation[] blockLocations = fileStatus.getBlockLocations();for (BlockLocation bl : blockLocations) {System.out.println("block-length:" + bl.getLength());System.out.println("block-offset:" + bl.getOffset());// 获取DataNodes的主机名String[] hosts = bl.getHosts();for (String host : hosts) {System.out.println(host);}}System.out.println("-----------------分割线-----------------");}}

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

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

相关文章

【C++】引用

1.引用的基本语法 2.引用注意事项 int &b&#xff1b;//错误 int &ba&#xff1b;//正确 3.引用做函数参数 int temp a&#xff1b; ab&#xff1b; btemp&#xff1b; 4.引用做函数返回值 出现问题&#xff1a; https://www.bilibili.com/video/BV1et411b73Z?p…

【计算机网络】网络基础

文章目录 1. 网络的发展2. 认识网络协议2.1 协议栈在所有操作系统中是统一的2.2 协议分层2.3 协议各层的功能2.4 协议分层的好处 3. 具体的网络协议栈3.1 OSI七层模型3.2 TCP/IP五层模型 4. 网络通信基本流程4.1 同局域网的两台主机通信4.2 跨局域网的两台主机通信 5. 网络中的…

JMeter的使用(2)

JMeter生成测试报告使用的是Ant(Maven)构建工具来生成HTML的测试报告。 ant执行的条件是需要有build.xml的文件的&#xff0c;build.xml文件里面主要编写三个内容&#xff1a; 1、定义了被执行的测试脚本 2、定义了测试报告的目录 3、定义了自动发送邮件 HTTP COOKIE管理器&am…

Spring详解(学习总结)

目录 一、Spring概述 &#xff08;一&#xff09;、Spring是什么&#xff1f; &#xff08;二&#xff09;、Spring框架发展历程 &#xff08;三&#xff09;、Spring框架的优势 &#xff08;四&#xff09;、Spring的体系结构 二、程序耦合与解耦合 &#xff08;一&…

【安全狗】linux免费服务器防护软件安全狗详细安装教程

在费用有限的基础上&#xff0c;复杂密码云服务器基础防护常见端口替换安全软件&#xff0c;可以防护绝大多数攻击 第一步&#xff1a;下载服务器安全狗Linux版&#xff08;下文以64位版本为例&#xff09; 官方提供了两个下载方式&#xff0c;本文采用的是 方式2 wget安装 方…

浏览器对跨域请求携带Cookie的方法

文章目录 一、前后端协商配置1.1 前端页面搭建1.2后端服务器搭建 二、配置允许跨域浏览器三、Chrome浏览器安装ModHeader插件 企业开发时会分开发环境、测试环境以及生产环境&#xff0c;但是有的企业开发只有真正发布到线上的生产环境的流程才会严格配置&#xff0c;有的项目开…

呼吸灯——FPGA

文章目录 前言一、呼吸灯是什么&#xff1f;1、介绍2、占空比调节示意图 二、系统设计1、系统框图2、RTL视图 三、源码四、效果五、总结六、参考资料 前言 环境&#xff1a; 1、Quartus18.0 2、vscode 3、板子型号&#xff1a;EP4CE6F17C8 要求&#xff1a; 将四个LED灯实现循环…

《深入理解计算机系统》(美)布赖恩特(Bryant,R.E.) 等

适合对象&#xff1a;对计算机感兴趣的朋友。 需要相关资料的可私信我。 持续更新中&#xff1a; 第一章&#xff1a;计算机系统漫游 主要知识点&#xff1a;解读全书结构框架&#xff0c;解释OS的原理和相关硬件软件。计算机系统是由硬件和系统软件组成&#xff0c;共同协作…

Linux小程序:倒计时和进度条

Linux小程序 在Linux中我们实现两个小程序来体会\r和\n的区别&#xff0c;以及缓冲区是什么&#xff1f; 文章目录 Linux小程序前言回车和换行的区别缓冲区 小程序的实现倒计时程序进度条程序 总结 前言 回车和换行的区别 对于 \r 和 \n 的理解&#xff1a; \n 表示换行且回…

Sentinel授权规则与规则持久化

&#x1f333;&#x1f333;&#x1f333;&#x1f333;&#x1f333;&#x1f333;&#x1f333; 学习授权规则前&#xff0c;先想想SpringCloud Gateway的黑白名单&#xff0c;请求过网关&#xff0c;gateway会去鉴权。但如果有人把微服务信息泄露出去了呢&#xff1f;此时微…

前端(八)——深入探索前端框架中的Diff算法:优化视图更新与性能提升

&#x1f60a;博主&#xff1a;小猫娃来啦 &#x1f60a;文章核心&#xff1a;深入探索前端框架中的Diff算法&#xff1a;优化视图更新与性能提升 文章目录 前端框架中的Diff算法概述vue和react框架的diff算法React的diff算法&#xff1a;Vue的diff算法&#xff1a; Diff算法在…

基于深度学习的高精度课堂人脸检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度课堂人脸检测系统可用于日常生活中或野外来检测与定位课堂人脸目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的课堂人脸目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标…

C# 未提供必须形参对应的实参

这个问题是在写观察者模式中遇到的一个问题。 具体的代码可以到《设计模式&#xff08;十五&#xff09;之观察者模式》中下载&#xff0c;下边只是部分代码。 我在抽象类中定义了构造函数&#xff0c;代码如下&#xff1a; using System; using System.Collections.Generic;…

设计模式-享元模式在Java中的使用示例-围棋软件

场景 享元模式 简介 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 例如在一个文本字符串中存在很多重复的字符&#xff0c;如果每一个字符都用一个单独的对象来表示&#xff0c;将会占用 较多的内存空间…

【案例教程】基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用能力

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库&#xff0c;还有丰富的第三方库&#xff0c;Python在数据处理、科学计算、数学建模、数据挖…

Vue中值的传递(父传子,子传父,子父同步)

1.父组件->子组件传递数据 ①父组件通过 v-bind: 属性绑定的形式&#xff0c;把数据传递给子组件 如果不需要动态绑定&#xff0c;则可以直接写number“张三” ②子组件中&#xff0c;通过props接收父组件传递过来的数据 2.子组件->父组件传递数据 1.在子组件中&#xf…

实现外部缓存-Redis

目录 实现 RedisTemplate RedisTemplate的序列化 RedisSerializer 创建Redis缓存配置类 测试使用 创建配置类 创建注解测试实体 创建配置文件 创建单元测试类进行测试 实现 RedisTemplate XXXTemplate 是 Spring 的一大设计特色&#xff0c;其中&#xff0c;RedisTe…

【基础算法】——双指针算法

文章目录 一、算法原理二、算法实战1. 力扣283 移动零2. 力扣1089 复写零3. 力扣15 三数之和4. 力扣18 四数之和 三、总结 一、算法原理 双指针算法是指在遍历对象的过程中不是普通的使用单个指针进行访问&#xff0c;而是使用两个相同方向(快慢指针)或者相反方向&#xff08;…

Tomcat服务器下载安装及配置教程(IDEA中使用Tomcat)

目录 友情提醒第一章、Tomcat下载与安装1.1&#xff09;Tomcat介绍1.2&#xff09;官网下载 第二章、Tomcat配置环境变量2.1&#xff09;windows环境变量配置2.2&#xff09;验证Tomcat配置是否成功2.3&#xff09;报错解决 第三章、IDEA整合Tomcat3.1&#xff09;打开IDEA开发…

【深度学习笔记】随机梯度下降法

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; 神经网络和…