当前位置: 首页 > news >正文

Java API访问HDFS

一、下载IDEA

下载地址:https://www.jetbrains.com/idea/download/?section=windows#section=windows
拉到下面使用免费的IC版本即可。
在这里插入图片描述运行下载下来的exe文件,注意安装路径最好不要安装到C盘,可以改成其他盘,其他选项按需勾选即可。

二、创建Java项目

运行IDEA,创建新的项目。
在这里插入图片描述选择创建maven项目
在这里插入图片描述为了方便管理,将hadoop作为父项目,所以修改Hadoop的项目类型为pom。找到pom.xml,并添加packaging标签,dependencymanagement,子模块就只需要添加依赖名,不需要导入依赖版本。

<packaging>pom</packaging>
<dependencyManagement><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.2.2</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies></dependencyManagement>

三、创建新的子模块

右键hadoop文件-new-module
在这里插入图片描述
查看依赖
在这里插入图片描述
添加Java class

四、HDFS操作示例

1.显示HDFS制定目录下的所有目录。
在pom.xml里添加需要用到的依赖

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-configuration2</artifactId><version>2.0</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.3.1</version><scope>test</scope></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.1</version></dependency>

参考代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.io.IOException;public class Demon {public static void main(String[] args) throws IOException {System.setProperty("HADOOP_USER_NAME","root");//访问hadoop用户名,这里我设置的是root,如果是别的用户名需要修改Configuration config = new Configuration();//声明一个新的访问配置对象config.set("fs.defaultFS","hdfs://192.168.56.201:8020");//设置访问的具体地址FileSystem fs = FileSystem.get(config);//创建一个新的文件系统对象FileStatus[] stas = fs.listStatus(new Path("/"));for(FileStatus f : stas){System.out.println(f.getPermission().toString() + "" + f.getPath().toString());//输出根目录下的所有文件或目录,不包含子目录}fs.close();}
}

输出结果:
在这里插入图片描述2.向HDFS写入内容writefiles
参考代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.io.IOException;
import java.io.OutputStream;public class Demo04WriteFile {public static void main(String[] args) throws IOException {String server = "hdfs://192.168.56.201:8020";System.setProperty("HADOOP_USER_NAME", "root");Configuration config = new Configuration();config.set("fs.defaultFS", server);try (FileSystem fs = FileSystem.get(config)) {OutputStream out = fs.create(new Path(server+"/test/b.txt"));out.write("Hello hadoop\n".getBytes());out.write("中文写入测试\n".getBytes());out.close();}}
}

输入hdfs dfs -cat /test/b.txt查询,成功写入
在这里插入图片描述
3.listfile显示所有文件
参考代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;import java.io.IOException;public class Demo02ListFiles {public static void main(String[] args) throws IOException {System.setProperty("HADOOP_USER_NAME", "root");Configuration config = new Configuration();config.set("fs.defaultFS", "hdfs://192.168.56.201:8020");FileSystem fs = FileSystem.get(config);RemoteIterator<LocatedFileStatus> files =fs.listFiles(new Path("/test"), true);while (files.hasNext()) {LocatedFileStatus file = files.next();System.out.println(file.getPermission() + " " + file.getPath());}fs.close();}
}

输出结果:
在这里插入图片描述4.读取HDFS文件的内容filesystem.open
代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.io.DataInputStream;
import java.io.IOException;public class Demo03ReadFile {public static void main(String[] args) throws IOException {String server = "hdfs://192.168.56.201:8020";System.setProperty("HADOOP_USER_NAME", "root");Configuration config = new Configuration();config.set("fs.defaultFS", server);try (FileSystem fs = FileSystem.get(config)) {DataInputStream in = fs.open(new Path(server+"/test/b.txt"));int len = 0;byte[] bs = new byte[1024];while ((len = in.read(bs)) != -1) {String str = new String(bs, 0, len);System.out.print(str);}}}}

输出结果:
在这里插入图片描述

http://www.lryc.cn/news/209808.html

相关文章:

  • 高三高考免费试卷真题押题知识点合集
  • css 计算函数属性:calc() 不起效 原因
  • 2、TB6600驱动器介绍【51单片机控制步进电机-TB6600系列】
  • Vue3:将表格数据下载为excel文件
  • vue+Fullcalendar
  • Spring定时任务+webSocket实现定时给指定用户发送消息
  • C语言学习笔记(六):数组(1)
  • apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】
  • 【IO面试题 五】、 Serializable接口为什么需要定义serialVersionUID变量?
  • san.js源码解读之模版解析(parseTemplate)篇——readIdent函数
  • 【excel技巧】excel单元格内如何换行?
  • SSD1306 oled显示屏的驱动SPI接口
  • RSA:基于小加密指数的攻击方式与思维技巧
  • Vuex 和 Redux 的区别?
  • 软考高级系统架构师冲关预测
  • 华为实验基础(1):交换机基础
  • bitlocker 加密锁定的固态硬盘,更换到别的电脑上,怎么把原密钥写进新电脑TPM芯片内,开启无需手动填密钥
  • C语言之错误处理
  • IO流框架,缓冲流
  • 数字音频工作站软件 Ableton Live 11 mac中文软件特点与功能
  • 【PyQt】调整子控件的层级以调整绘制的先后顺序
  • js中数组的相关方法
  • 深入浅出排序算法之直接插入排序(拓展:折半插入排序)
  • 皮卡丘RCE靶场通关攻略
  • Mysql binlog日志功能使用,简单易懂
  • 计算机视觉-光源的目的和作用
  • 源码角度分析Java 循环中删除数据为什么会报异常
  • leetCode 229. 多数元素 II + 摩尔投票法 + 进阶 + 优化空间
  • 5 个编写高效 Makefile 文件的最佳实践
  • 20231028刷题记录