本次实战涉及使用Java操作Hadoop HDFS,包括创建文件、判断文件存在性及异常处理。通过手动添加依赖、启动HDFS服务,成功在HDFS上创建和检查文件。进一步探索了文件操作的最佳实践,如检查文件存在性以避免重复创建,以及处理HDFS安全模式下的异常情况。整个过程加深了对Hadoop文件系统操作的理解,并提高了解决实际问题的能力。
用Maven项目比用Java项目更方便,在pom.xml
添加2个依赖即可
- 项目对象模型文件 -
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.huawei</groupId><artifactId>Test</artifactId><version>1.0-SNAPSHOT</version><name>Test</name><dependencies><!--hadoop客户端--><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></project>
- 日志属性文件 -
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
- 创建文件类 -
CreateFileOnHDFS
package net.huawei.hdfs;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;import java.net.URI;/*** 功能:在HDFS上创建文件* 作者:华卫* 日期:2024年11月15日*/
public class CreateFileOnHDFS {@Testpublic void create1() throws Exception {// 创建配置对象Configuration conf = new Configuration();// 创建统一资源标识符String uri = "hdfs://master:9000";// 创建HDFS文件系统对象FileSystem fs = FileSystem.get(new URI(uri), conf);// 创建路径对象(指向文件)Path file = new Path(uri + "/ied02/hadoop.txt");// 基于路径对象创建文件boolean result = fs.createNewFile(file);// 判断文件是否创建成功if (result) {System.out.println("恭喜,文件[" + file + "]创建成功~");} else {System.out.println("遗憾,文件[" + file + "]创建失败~");}}@Testpublic void create2() throws Exception {// 创建配置对象Configuration conf = new Configuration();// 创建统一资源标识符String uri = "hdfs://master:9000";// 创建HDFS文件系统对象FileSystem fs = FileSystem.get(new URI(uri), conf);// 创建路径对象(指向文件)Path file = new Path(uri + "/ied02/hadoop.txt");// 判断文件是否存在if (fs.exists(file)) {System.out.println("文件[" + file + "]已经存在~");} else {try {// 基于路径对象创建文件boolean result = fs.createNewFile(file);// 判断文件是否创建成功if (result) {System.out.println("恭喜,文件[" + file + "]创建成功~");} else {System.out.println("遗憾,文件[" + file + "]创建失败~");}} catch (Exception e) {System.err.println("异常信息:" + e.getMessage());}}}
}
-
删除文件,执行命令:
hdfs dfs -rm /ied02/hadoop.txt
-
运行
create1()
方法,查看结果
-
此时,文件已经创建了,再次运行
create1()
方法,提示文件创建失败
-
运行
create2()
方法,提示文件已经存在