赞
踩
一、导入新课
二、新课讲解
由于Hadoop是使用Java语言编写的,因此可以使用Java API操作Hadoop文件系统。HDFS Shell本质上就是对Java API的应用,通过编程的形式操作HDFS,其核心是使用HDFS提供的Java API构造一个访问客户端对象,然后通过客户端对象对HDFS上的文件进行操作(增、删、改、查)
(一)了解HDFS Java API
Hadoop文件系统API文档:Apache Hadoop 3.3.4 – The Hadoop FileSystem API Definition
类或接口 | 功能描述 |
org.apache.hadoop.fs.FileSystem | 一个通用文件系统的抽象基类,可被分布式文件系统继承。 |
org.apache.hadoop.fs.FileStatus | 文件状态接口,用于向客户端展示系统中文件和目录的元数据。具体包括文件大小、块大小、副本信息、所有者、修改时间等,可通过FileSystem.listStatus()方法获得具体的实例对象 |
org.apache.hadoop.fs.FileDataInputStream | 文件输入流,用于读取Hadoop文件。 |
org.apache.hadoop.fs.FileDataOutputStream | 文件输出流,用于写Hadoop文件 |
org.apache.hadoop.fs.Configuration | 访问配置项,所有配置项的值,如果在core-site.xml中有对应的配置,则以core-site.xml为准 |
org.apache.hadoop.fs.Path | 路径,用于表示Hadoop文件系统中的一个文件或一个目录的路径。 |
org.apache.hadoop.fs.PathFilter | 路径过滤器接口,通过实现方法PathFilter.accept(Path path)来判断是否接收路径path表示的文件或目录。 |
2、FileSystem的常用方法
FileSystem类API文档:Apache Hadoop 3.3.4 – class
方法名 | 功能描述 |
copyFromLocalFile(Path src, Path dst) | 从本地磁盘复制文件到HDFS |
copyToLocalFile(Path src, Path dst) | 从HDFS复制文件到本地磁盘 |
mkdirs(Path f) | 建立子目录 |
rename(Path src, Path dst) | 重命名文件或文件夹 |
delete(Path f) | 删除指定文件 |
(二)编写Java程序访问HDFS
创建Maven项目 - HDFSDemo
单击【Finish】按钮
在pom.xml
文件里添加hadoop
和junit
依赖
- <dependencies>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-client</artifactId>
- <version>3.3.4</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.13.2</version>
- </dependency>
- </dependencies>
hadoop
hadoop-client
超链接3.3.4
超链接 在resources
目录里创建log4j.properties
文件
- log4j.rootLogger=stdout, logfile
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
- log4j.appender.logfile=org.apache.log4j.FileAppender
- log4j.appender.logfile.File=target/hdfs.log
- log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
- log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
start-dfs.sh
创建net.hw.hdfs
包,在包里创建CreateFileOnHDFS
类
/ied01
目录,在该目录里创建hadoop.txt
文件- package net.hw.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
-
- import java.net.URI;
-
- /**
- * 功能:在HDFS上创建文件
- * 作者:华卫
- * 日期:2022年11月18日
- */
- public class CreateFileOnHDFS {
- public static void main(String[] args) throws Exception {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 定义统一资源标识符
- String uri = "hdfs://master:9000";
- // 创建文件系统对象
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建路径对象
- Path path = new Path(uri + "/ied01/hadoop.txt");
- // 创建文件
- boolean result = fs.createNewFile(path);
- // 判断文件是否创建成功
- if (result) {
- System.out.println("文件[" + path + "]创建成功!");
- } else {
- System.out.println("文件[" + path + "]创建失败!");
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
在/ied01目录里确实创建了一个0字节的hadoop.txt文件,有点类似于Hadoop Shell里执行hdfs dfs -touchz /ied01/hadoop.txt命令的效果,但是有一点不同,hdfs dfs -touchz命令重复执行,不会失败,只是不断改变该文件的时间戳。
再次运行程序,由于hadoop.txt
已经存在,此时会提示用户创建失败
能否事先判断文件是否存在呢?我们去查看Hadoop FileSystem API文档
查看exists(Path path)
方法
在net.hw.hdfs
包里创建CreateFileOnHDFS
类,事先判断文件是否存在
- package net.hw.hdfs;
-
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.FileSystem;
- import org.apache.hadoop.fs.Path;
-
- import java.net.URI;
-
- /**
- * 功能:在HDFS上创建文件
- * 事先判断文件是否存在
- * 作者:华卫
- * 日期:2022年11月25日
- */
- public class CreateFileOnHDFS_ {
- public static void main(String[] args) throws Exception {
- // 创建配置对象
- Configuration conf = new Configuration();
- // 定义统一资源标识符(uri:uniform resource identifier)
- String uri = "hdfs://master:9000";
- // 创建文件系统对象(基于HDFS的文件系统)
- FileSystem fs = FileSystem.get(new URI(uri), conf);
- // 创建路径对象
- Path path = new Path(uri + "/ied01/hadoop.txt");
- // 判断路径对象指向的文件是否存在
- if (fs.exists(path)) {
- // 提示用户文件已存在
- System.out.println("文件[" + path + "]已经存在!");
- } else {
- // 基于路径对象创建文件
- boolean result = fs.createNewFile(path);
- // 根据返回值判断文件是否创建成功
- if (result) {
- System.out.println("文件[" + path + "]创建成功!");
- } else {
- System.out.println("文件[" + path + "]创建失败!");
- }
- }
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
运行程序,查看结果
(一)设置项目sdk与语言等级
打开项目窗口,设置项目sdk-jdk11.项目语言等级-11
进入project
(二)设置模块语言等级
设置模块语言等级11
(三)设置java编译器等级
打开设置对话框,查看jav
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。