大数据学习案例——使用Java API操作HDFS

通过Java API演示如何操作HDFS分布式文件系统的文件和目录。

目录

1.配置案例环境

1)打开IntelliJ IDEA

打开IntelliJ IDEA开发工具,进入到Welcome to IntelliJ IDEA窗口。

2)新建Maven项目

在New Project对话框,选择创建项目的类型为Maven项目。

3)配置Maven项目

在New Project对话框,对创建的Maven项目进行配置。

4)配置项目名称和存储目录

在New Project对话框,分别指定项目名称和项目存储目录。

2.添加Maven库依赖

在pom.xml文件中,添加Maven库依赖。

bash 复制代码
​    <dependency>

​       <groupId>org.apache.hadoop</groupId>

​       <artifactId>hadoop-common</artifactId>

​       <version>3.3.0</version>

​     </dependency>

​     <dependency>

​       <groupId>org.apache.hadoop</groupId>

​       <artifactId>hadoop-hdfs</artifactId>

​       <version>3.3.0</version>

​     </dependency>

​     <dependency>

​       <groupId>org.apache.hadoop</groupId>

​       <artifactId>hadoop-client</artifactId>

​       <version>3.3.0</version>

​     </dependency>

​     <dependency>

​       <groupId>junit</groupId>

​       <artifactId>junit</artifactId>

​       <version>4.12</version>

​    </dependency>


单击IntelliJ IDEA开发工具右侧的"Maven"→"Dependencies"按钮,即可查看到相关的jar包。

3.获取客户端对象

在HadoopDemo项目中创建cn.itcast.hdfsdemo包,在该包下创建HDFS_CURD类,构建HDFS的客户端实例。

第一步:创建init()方法

java 复制代码
public void init() {  }  

第二步:指定HDFS配置信息

java 复制代码
Configuration conf = new Configuration();  

第三步:指定HDFS中NameNode节点的通信地址,连接HDFS

java 复制代码
conf.set("fs.defaultFS", "hdfs://hadoop1:9000");

第四步:指定具有操作HDFS权限的用户root。

java 复制代码
System.setProperty("HADOOP_USER_NAME", "root");

第五步:调用FileSystem类的get()方法获取conf对象指定的配置信息,并创建操作HDFS的对象fs。

java 复制代码
fs = FileSystem.get(conf); 

4.上传文件到HDFS

在HDFS_CURD类中添加方法testAddFileToHdfs(),用于将本地文件系统中,D:\upload\路径下的文件test.txt上传到HDFS的/testFile目录,且该目录必须存在。

java 复制代码
 @Test
public void testAddFileToHdfs() throws IOException {
	Path src = new Path("D:\\upload\\test.txt");
	Path dst = new Path("/testFile");
	fs.copyFromLocalFile(src, dst);
	fs.close();
}

在HDFS_CURD类中添加方法testDownloadFileToLocal(),用于将HDFS中/testFile目录下的文件test.txt下载到本地文件系统的D:\downloadFile路径。

5.从HDFS下载文件

在HDFS_CURD类中添加方法testDownloadFileToLocal(),用于将HDFS中/testFile目录下的文件test.txt下载到本地文件系统的D:\downloadFile路径。

java 复制代码
@Test
public void testDownloadFileToLocal() throws IllegalArgumentException,IOException {
    fs.copyToLocalFile(
new Path("/testFile/test.txt"), 
new Path("D:\\downloadFile"));
}

6.目录操作

在HDFS_CURD类中添加方法testMkdirAndDeleteAndRename(),用于对HDFS的目录进行操作,包括创建目录、重命名目录和删除目录。

java 复制代码
@Test
public void testMkdirAndDeleteAndRename() throws Exception {
	fs.mkdirs(new Path("/a/b/c"));
	fs.mkdirs(new Path("/a2/b2/c2"));
	fs.rename(new Path("/a"), new Path("/a3"));
	fs.delete(new Path("/a2"), true);
}

7.查看文件中的目录信息

在HDFS_CURD类中添加方法testListFiles(),用户获取/car目录中所有文件的信息包括文件名、文件大小、文件权限等。在/car目录中包含文件car_prices.csv和子目录/other,并且在子目录中包含文件car_prices1.csv和car_prices2.csv。

第一步: 创建testListFiles() 方法。

java 复制代码
public void testListFiles() {}

第二步:递归获取/car目录下文件的信息。

java 复制代码
RemoteIterator<LocatedFileStatus> listFiles =fs.listFiles(new Path("/car"), true);

第三步:获取每个文件的名称、副本数、权限、大小和Block所在服务器的主机名。

java 复制代码
while (listFiles.hasNext()) {
        LocatedFileStatus fileStatus = listFiles.next();
       System.out.println("文件名:" + fileStatus.getPath().getName());
       System.out.println("文件的副本数:" + fileStatus.getReplication());
       System.out.println("文件的权限:" + fileStatus.getPermission());
       System.out.println("文件大小:" + fileStatus.getLen() + "字节");
       BlockLocation[] blockLocations =fileStatus.getBlockLocations();
         for (BlockLocation bl : blockLocations) {
            String[] hosts = bl.getHosts();
            System.out.println("文件的Block所在虚拟机的主机名:");
            for (String host : hosts) {
                System.out.println(host);
            }
        System.out.println("----------------------------");
    }

如果此时你报了: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems的错误,说明,你没有在Windows中配置Hadoop的运行环境,详细解决方案请看https://blog.csdn.net/2301_76901778/article/details/144332904?spm=1001.2014.3001.5501

8.运行HDFS_CURD类

选中HDFS_CURD类,右键选择"Run HDFS_CURD"选项运行。

9.查看HDFS下载到本地文件系统的文件

在本地文件系统的D:\downloadFile路径查看从HDFS的/testFile目录下载的文件。

10.查看HDFS的目录

在虚拟机Hadoop1执行命令查看HDFS根目录的内容,以及查看/testFile目录的内容。

相关推荐
架构文摘JGWZ4 分钟前
一键完成!!网页打包成桌面应用
开发语言·学习·开源软件·工具
快乐非自愿4 分钟前
一文解秘Rust如何与Java互操作
java·开发语言·rust
小万编程6 分钟前
基于SpringBoot+Vue毕业设计选题管理系统(高质量源码,提供文档,免费部署到本地)
java·vue.js·spring boot·计算机毕业设计·java毕业设计·web毕业设计
m0_7482350710 分钟前
使用rustDesk搭建私有远程桌面
java
快乐是17 分钟前
发票打印更方便
java
文浩(楠搏万)21 分钟前
Java内存管理:不可达对象分析与内存泄漏优化技巧 Eclipse Memory Analyzer
java·开发语言·缓存·eclipse·内存泄漏·不可达对象·对象分析
圆蛤镇程序猿23 分钟前
【什么是MVCC?】
java·数据库·oracle
m0_7482567824 分钟前
【SQL】掌握SQL查询技巧:数据分组与排序
java·jvm·sql
Damon撇嘴笑26 分钟前
Cause: java.sql.SQLException: sql injection violation, comment not allow异常问题处理
java·数据库·sql
孟秋与你36 分钟前
【redisson】redisson分布式锁原理分析
java·分布式