大数据学习案例——使用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目录的内容。

相关推荐
~Yogi1 小时前
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
学习·spring·缓存
Moonnnn.3 小时前
【单片机期末】单片机系统设计
笔记·单片机·嵌入式硬件·学习
行云流水剑5 小时前
【学习记录】使用 Kali Linux 与 Hashcat 进行 WiFi 安全分析:合法的安全测试指南
linux·学习·安全
有梦想的骇客5 小时前
书籍“之“字形打印矩阵(8)0609
java·算法·矩阵
yours_Gabriel6 小时前
【java面试】微服务篇
java·微服务·中间件·面试·kafka·rabbitmq
柒间6 小时前
Elasticsearch 常用操作命令整合 (cURL 版本)
大数据·数据库·elasticsearch
门前云梦7 小时前
《C语言·源初法典》---C语言基础(上)
c语言·开发语言·学习
hashiqimiya7 小时前
android studio中修改java逻辑对应配置的xml文件
xml·java·android studio
liuzhenghua668 小时前
Python任务调度模型
java·运维·python
結城8 小时前
mybatisX的使用,简化springboot的开发,不用再写entity、mapper以及service了!
java·spring boot·后端