mac系统上hdfs java api的简单使用

news/2024/5/6 17:56:04/文章来源:https://blog.csdn.net/fu_huo_1993/article/details/129289894

文章目录

  • 1、背景
  • 2、环境准备
  • 3、环境搭建
    • 3.1 引入jar包
    • 3.2 引入log4j.properties配置文件
    • 3.3 初始化Hadoop Api
  • 4、java api操作
    • 4.1 创建目录
    • 4.2 上传文件
    • 4.3 列出目录下有哪些文件
    • 4.4 下载文件
    • 4.5 删除文件
    • 4.6 检测文件是否存在
  • 5、完整代码

1、背景

在上一节中,我们简单学习了在命令行上如何操作hdfs shell api,此处我们通过java程序来操作一下。

2、环境准备

  1. 需要在本地环境变量中 配置 HADOOP_HOME 或在程序启动的时候通过命令行指定hadoop.home.dir的值,值为HADOOP的home目录地址。可通过org.apache.hadoop.util.Shell#checkHadoopHome方法验证。
  2. 我们的HADOOP最好是自己在本地系统进行重新编译,不然可能运行部分java api会出现问题。

3、环境搭建

3.1 引入jar包

<dependencyManagement><dependencies><dependency><groupId>org.junit</groupId><artifactId>junit-bom</artifactId><version>5.7.1</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
<dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.4</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.14.1</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.14.1</version></dependency>
</dependencies>

3.2 引入log4j.properties配置文件

log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%-5p] %d{ HH:mm:ss,SSS} [%t]:%m%nlog4j.rootLogger = debug,console

引入这个配置是为了,当hadoop报错时,更好的排查问题

3.3 初始化Hadoop Api

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class HdfsApiTest {private FileSystem fileSystem;private static final Logger log = LoggerFactory.getLogger(HdfsApiTest.class);@BeforeAllpublic void setUp() throws IOException, InterruptedException {// 1、将 HADOOP_HOME 设置到环境变量中Configuration configuration = new Configuration();// 2、此处的地址是 NameNode 的地址URI uri = URI.create("hdfs://192.168.121.140:8020");// 3、设置用户String user = "hadoopdeploy";// 此处如果不设置第三个参数,指的是客户端的身份,默认获取的是当前用户,不过当前用户不一定有权限,需要指定一个有权限的用户fileSystem = FileSystem.get(uri, configuration, user);}@AfterAllpublic void tearDown() throws IOException {if (null != fileSystem) {fileSystem.close();}}
}

此处我们需要注意的是,需要设置客户端操作的 用户,默认情况下获取的是当前登录用户,否则很有可能会出现如下错误

客户端用户使用不对
解决办法:
1、修改目录的访问权限。
2、修改客户端的用户,比如此处修改成hadoopdeploy

4、java api操作

4.1 创建目录

@Test
@DisplayName("创建hdfs目录")
public void testMkdir() throws IOException {Path path = new Path("/bigdata/hadoop/hdfs");if (fileSystem.exists(path)) {log.info("目录 /bigdata/hadoop/hdfs 已经存在,不在创建");return;}boolean success = fileSystem.mkdirs(path);log.info("创建目录 /bigdata/hadoop/hdfs 成功:[{}?]", success);
}

4.2 上传文件

@Test
@DisplayName("上传文件")void uploadFile() throws IOException {/*** delSrc: 文件上传后,是否删除源文件 true:删除 false:不删除* overwrite: 如果目标文件存在是否重写 true:重写 false:不重写* 第三个参数:需要上传的文件* 第四个参数:目标文件*/fileSystem.copyFromLocalFile(false, true,new Path("/Users/huan/code/IdeaProjects/me/spring-cloud-parent/hadoop/hdfs-api/src/test/java/com/huan/hadoop/HdfsApiTest.java"),new Path("/bigdata/hadoop/hdfs"));}

4.3 列出目录下有哪些文件

@Test
@DisplayName("列出目录下有哪些文件")void testListFile() throws IOException {RemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(new Path("/bigdata"), true);while (iterator.hasNext()) {LocatedFileStatus locatedFileStatus = iterator.next();Path path = locatedFileStatus.getPath();if (locatedFileStatus.isFile()) {log.info("获取到文件: {}", path.getName());}}}

4.4 下载文件

@Test
@DisplayName("下载文件")void testDownloadFile() throws IOException {fileSystem.copyToLocalFile(false, new Path("/bigdata/hadoop/hdfs/HdfsApiTest.java"),new Path("/Users/huan/HdfsApiTest.java"), true);}

4.5 删除文件

@Test
@DisplayName("删除文件")
public void testDeleteFile() throws IOException {fileSystem.delete(new Path("/bigdata/hadoop/hdfs/HdfsApiTest.java"), false);
}

4.6 检测文件是否存在

@Test
@DisplayName("检查文件是否存在")public void testFileExists() throws IOException {Path path = new Path("/bigdata/hadoop/hdfs/HdfsApiTest.java");boolean exists = fileSystem.exists(path);log.info("/bigdata/hadoop/hdfs/HdfsApiTest.java 存在:[{}]", exists);}

5、完整代码

https://gitee.com/huan1993/spring-cloud-parent/blob/master/hadoop/hdfs-api/src/test/java/com/huan/hadoop/HdfsApiTest.java

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

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

相关文章

PaddleOCR遇到 lanms-neo问题处理

在window环境中安装PaddleOCR依赖是真的蛋疼&#xff0c;关键官方论坛里也都没有具体的解决方案。吐槽。。。吐槽。。。 我在 “windows安装lanms-neo问题处理”文章中看到lanms-neo问题全过程解决。个人觉得文档说明不是很细致&#xff0c;导致我按步骤执行&#xff0c;还是安…

JVM对象实例化详解

1、对象创建方式你知道几种呢&#xff1f;new&#xff1a;最常见的方式、Xxx的静态方法&#xff0c;XxxBuilder/XxxFactory的静态方法Class的newInstance方法&#xff1a;反射的方式&#xff0c;只能调用空参的构造器&#xff0c;权限必须是publicConstructor的newInstance(XXX…

【女士,房间墙上凿个洞,看你在干嘛~】安全攻防内网渗透-绕过防火墙和安全检测,搭建DNS隐蔽隧道

作者&#xff1a;Eason_LYC 悲观者预言失败&#xff0c;十言九中。 乐观者创造奇迹&#xff0c;一次即可。 一个人的价值&#xff0c;在于他所拥有的。所以可以不学无术&#xff0c;但不能一无所有&#xff01; 技术领域&#xff1a;WEB安全、网络攻防 关注WEB安全、网络攻防。…

将vue-devtools打包成edge插件

文章目录一、从github拉vue-devtools源码二、用npm安装yarn三、使用yarn安装并编译源码四、将vue-devtools打包成edge插件五、离线安装edge插件一、从github拉vue-devtools源码 目前最新的版本是v6.5.0&#xff0c;地址&#xff1a;https://github.com/vuejs/devtools 二、用n…

深度学习被你忽略的细节系列篇——Softmax、LogSumExp和Sigmoid

平时我们基本用pytorch或者tensorflow框架时&#xff0c;基本对特别底层的函数实现关注不多&#xff0c;仅限于知道公式的原理。但是很多大佬往往自己会实现一些源码(比如ListNet复现)&#xff0c;在看这些源码时&#xff0c;经常出现各种有点难以理解的代码&#xff0c;本来很…

教你如何搭建设备-巡检管理系统,demo可分享

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建设备-巡检管理。1.2、应用场景设备管理员进行制定设备巡检时间/内容计划、记录设备巡检信息、可以查看今日待巡检设备。2、设置方法2.1、表单搭建1&#xff09;新建表单【设备档案-履历表】&#xff0c;字段设置如下&#x…

安卓手机当旁路网关

一、安卓shell调试工具下载【电脑版下载地址】安卓adb调试工具&#xff0c;包含MAC苹果、Windows和Linux 三种版【手机版下载地址Termux】下载地址&#xff1a;https://github.com/termux/termux-app/releases如果不懂下载哪个版本&#xff0c;可以直接下载通用版&#xff1a;t…

【unity3d】rts engine 5 设置集结点;放置建筑

一 接上回新建建筑&#xff0c;设置生产单位&#xff0c;现在设置集结点 1 进入建筑预制体&#xff0c;add component 添加 rallypoint setting target 页面&#xff0c;设置面板按钮&#xff0c;音频 resource dead是可设置在耗尽的资源上&#xff0c;下一个是自动寻找附近同…

QT打包的两种方式

QT打包的两种方式&#xff1a; 一个是QT5自带的windeployqt&#xff08;不需要下载安装&#xff09;&#xff0c;它可以找到程序&#xff08;exe&#xff09;用到的所有库文件&#xff0c;并且都拷贝到exe程序的当前文件。此时打包的exe较小&#xff0c;需要和拷贝进来的文件放…

Modbus网关在锂电池干燥箱的应用

在锂离子电池生产过程中&#xff0c;将正负极片辊压绕卷再放入电池盒之后&#xff0c;须对锂电池电芯极组进行烘烤干燥。相信大家也了解水分对锂电池的性能影响是很大的&#xff0c;需要注液前在装配车间将锂离子电池电芯内部的水分去除&#xff0c;以免影响锂电池质量。在锂电…

在 The Sandbox 中以全新的 Rabbids 体验庆祝兔年!

育碧(Ubisoft) 和 The Sandbox 联手为你们带来终极的农历新年体验&#xff01; 穿戴上你们新鲜出炉的 Rabbids 人物化身来参加派对吧&#xff0c;保证震撼整个元宇宙&#xff01;这个全新体验为 Rabbids 人物化身持有者专属。没有获得 Rabbids 人物化身吗&#xff1f;不要担心&…

你知道Java中的JCP, JEP, JLS, JSR是什么意思吗?

目录 一、JCP 二、JSR 三、JLS 四、JEP 公众号&#xff1a;MCNU云原生&#xff0c;欢迎微信搜索关注&#xff0c;更多干货&#xff0c;及时掌握。 JCP, JEP, JLS, JSR这些概念是Java社区中的一些概念&#xff0c;但是没有没有经常关注社区的童鞋们未必知道这些缩写所代表的…

围棋

围棋 规则 棋盘 围棋使用矩形格状棋盘及黑白二色圆形棋子进行对弈&#xff0c;正规棋盘上有纵横各19条线段&#xff0c;361个交叉点。 基本下法 1&#xff0e;对局双方各执一色棋子&#xff0c;黑先白后&#xff0c;交替下子&#xff0c;每次只能下一子。 2&#xff0e;棋子…

Go 实现 AOI 区域视野管理

在游戏中,场景里存在大量的物体.如果我们把所有物体的变化都广播给玩家.那客户端很难承受这么大的压力.因此我们肯定会做优化.把不必要的信息过滤掉.如只关心玩家视野所看到的.减轻客户端的压力,给玩家更流畅的体验. 优化的思路一般是: 第一个是尽量降低向客户端同步对象的数量…

为什么FPGA在深度学习领域有着得天独厚的优势?

01 FPGA在深度学习领域有哪些优势 FPGA&#xff08;Field-Programmable Gate Array&#xff09;是一种灵活的可编程硬件设备&#xff0c;它在深度学习应用领域中具有许多优势。 首先&#xff0c;FPGA具有非常高的并行性。在深度学习中&#xff0c;许多计算都可以并行化&…

“数字档案室测评”相关参考依据梳理

数字档案室建设无疑比数字档案馆建设应用范围更为广泛&#xff0c;涉及的单位类型和专业领域也更多。这一点从国家档案局的机构设置上也可以看出端倪&#xff1a; 国家档案局两个内设业务指导司中&#xff0c;档案馆(室)业务指导司主要针对档案馆和机关档案室&#xff0c;而经济…

施工机械设备群远程在线监控管理系统

一、项目背景 在加强基础设施建设等一系列政策的牵引下&#xff0c;我国工程机械设备市场连续保持强劲增长势头&#xff0c;伴随国内中高端机械设备公司业务的不断扩展&#xff0c;施工大型机械设备的应用率不断提高&#xff0c;铁路施工特别是架桥机作业过程被认为是一个极易出…

Windows搭建机器学习环境

一、环境介绍Anaconda&#xff1a;Anaconda offers the easiest way to perform Python/R data science and machine learning on a single machine. Start working with thousands of open-source packages and libraries today.Anaconda包括Conda、Python以及一大堆安装好的工…

边缘计算开源项目解读——kubeedge mappers实现

0 背景 本文重点解读kubeedge项目中的mapper模块。该模块位于kubeedge的edgecore的南向边缘侧&#xff0c;主要对接入kubeedge的终端设备&#xff0c;进行协议的适配和转换&#xff0c;使其可以和边缘设备通信&#xff0c;转换后的协议是我们前面描述的mqtt协议&#xff0c;当然…

快速上手配置firewalld

firewalld使用firewall-cmd命令配置策略。 查看当前firewalld当前服务运行状态 firewall-cmd --state firewalld防火墙状态还用使用如下命令查看状态 systemctl status firewalld 查看所有打开运行的端口 firewall-cmd --zonepublic --list-ports 查看区域信息情况 firewall…