HDFS Java API 基本操作实验

news/2024/5/20 0:49:33 标签: hdfs, java, hadoop

文章目录

  • 一、实验环境
  • 二、实验内容
    • (一)数据准备
    • (二)编程环境准备
    • (三)使用Hadoop API操作HDFS文件系统
    • (四)使用Hadoop API + Java IO流操作HDFS文件系统
  • 三、实验步骤
    • (一)数据准备
    • (二)编程环境准备
      • 1、启动IDEA
      • 2、创建Maven项目
      • 3、添加项目依赖
      • 4、添加资源文件
      • 5、创建包
    • (三)使用Hadoop API操作HDFS文件系统
      • 1、获取文件系统并配置在集群上运行
      • 2、创建目录
      • 3、上传文件
      • 4、下载文件
      • 5、删除文件/目录
      • 6、列出指定路径下的文件和目录
      • 7、查看完整代码
    • (四)使用Hadoop API + Java IO流操作HDFS文件系统
      • 1、获取文件系统并配置在集群上运行
      • 2、上传文件(IO流)
      • 3、读取文件(IO流)
      • 4、下载文件(IO流)
      • 5、辅助代码

一、实验环境

  • 本实验主要涉及到了4台虚拟机,其中1台虚拟机的操作系统是ubuntu desktop,另外3台虚拟机的操作系统是centos server
    在这里插入图片描述
  • 本实验已经搭建好了Hadoop HA的完全分布式集群
    在这里插入图片描述

二、实验内容

  • 我们将一同探讨数据处理中至关重要的一环——Hadoop文件系统(HDFS)的操作。我们将分为四个主要部分,分别是数据准备、编程环境准备、使用Hadoop API操作HDFS文件系统以及使用Hadoop API结合Java IO流进行操作。

(一)数据准备

  • 在进行任何数据处理之前,充分准备好数据是至关重要的一步。这一部分将介绍数据准备的重要性,以及如何有效地准备数据以供后续处理使用。

(二)编程环境准备

  • 在进行HDFS文件系统的操作之前,我们需要确保我们的编程环境已经得到了妥善的准备。这包括获取文件系统、配置集群环境等步骤,确保我们的操作能够在集群上运行。

(三)使用Hadoop API操作HDFS文件系统

  • 这一部分是我们的重头戏,我们将使用Hadoop API进行各种文件系统的操作。从创建目录到上传、下载、删除文件,再到列出指定路径下的文件和目录,我们将一一演示如何使用Hadoop API轻松地完成这些操作。同时,我们也会分享一些辅助代码,使大家更好地理解和应用这些操作。

(四)使用Hadoop API + Java IO流操作HDFS文件系统

  • 在这一部分,我们将进一步深入,结合Java IO流,展示如何通过IO流上传、读取和下载文件。这将为大家提供更多的灵活性和掌握文件系统操作的技能。

  • 本次实验帮助大家更好地理解和应用Hadoop文件系统的操作,使大家能够在实际工作中更加得心应手。接下来,我们将深入到各个部分,让我们一同来探索这个数据处理的世界吧!

三、实验步骤

(一)数据准备

  • desktop节点打开终端
    在这里插入图片描述
  • 切换到/opt目录
    在这里插入图片描述
  • 创建数据文件data.txt
    在这里插入图片描述
  • 创建数据文件localFile.txt
    在这里插入图片描述
  • 下载日志属性文件,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/log4j.properties
    在这里插入图片描述
  • 下载Hadoop核心配置文件core-site.xml,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/core-site.xml
    在这里插入图片描述
  • 下载Hadoop分布式文件系统配置文件hdfs-site.xml,执行命令:wget 192.168.192.81:8086/api/web/resource/bigdata/Hadoop_Base/06/expPackages/hdfs-site.xml
    在这里插入图片描述

(二)编程环境准备

1、启动IDEA

  • 在desktop节点上启动IDEA
    在这里插入图片描述

  • 勾选用户协议
    在这里插入图片描述

  • 单击【Continue】按钮
    在这里插入图片描述

2、创建Maven项目

  • 单击欢迎窗口中的【New Project】按钮,在左边栏里选择【Maven】类型
    在这里插入图片描述
  • 单击【Next】按钮,在对话框里设置项目名称、位置、组标识和构件标识
    在这里插入图片描述
  • 单击【Finish】按钮,在弹出的【Tip of the Day】消息框里勾选【Don’t show tips】复选框
    在这里插入图片描述
  • 单击【Close】按钮,看到一个空的Maven项目
    在这里插入图片描述

3、添加项目依赖

  • pom.xml文件里添加相关依赖
    在这里插入图片描述
<dependencies>                                        
    <dependency>                                      
        <groupId>org.apache.hadoop</groupId>          
        <artifactId>hadoop-common</artifactId>        
        <version>2.7.6</version>                      
    </dependency>                                     
    <dependency>                                      
        <groupId>org.apache.hadoop</groupId>          
        <artifactId>hadoop-client</artifactId>        
        <version>2.7.6</version>                      
    </dependency>                                     
    <dependency>                                      
        <groupId>org.apache.hadoop</groupId>          
        <artifactId>hadoop-hdfs</artifactId>          
        <version>2.7.6</version>                      
    </dependency>                                     
    <dependency>                                      
        <groupId>junit</groupId>                      
        <artifactId>junit</artifactId>                
        <version>4.10</version>                       
    </dependency>                                     
    <dependency>                                      
        <groupId>org.apache.logging.log4j</groupId>   
        <artifactId>log4j-core</artifactId>           
        <version>2.8.2</version>                      
    </dependency>                                     
</dependencies>                                       
hadoopcommon_orgapachehadoophadoopcommon276_89">(1)hadoop-common (org.apache.hadoop:hadoop-common:2.7.6)
  • 作用: 提供Hadoop的通用库和工具,包括文件系统操作、配置管理等。
  • 详细说明: 这是Hadoop的核心库,包含了许多通用的类和工具,用于支持Hadoop分布式文件系统(HDFS)和分布式计算。
hadoopclient_orgapachehadoophadoopclient276_92">(2)hadoop-client (org.apache.hadoop:hadoop-client:2.7.6)
  • 作用: 提供Hadoop的客户端库,支持与Hadoop集群进行交互。
  • 详细说明: 包含Hadoop客户端的相关类,用于在应用程序中与Hadoop集群通信,提交作业等。
hadoophdfs_orgapachehadoophadoophdfs276_95">(3)hadoop-hdfs (org.apache.hadoop:hadoop-hdfs:2.7.6)
  • 作用: 提供Hadoop分布式文件系统(HDFS)的支持。
  • 详细说明: 包含了HDFS相关的类,用于进行文件系统的读写操作,支持分布式存储和文件管理。
(4)junit (junit:junit:4.10)
  • 作用: 提供Java单元测试的支持。
  • 详细说明: JUnit是一个广泛用于Java项目的测试框架,用于编写和运行单元测试。
(5)log4j-core (org.apache.logging.log4j:log4j-core:2.8.2)
  • 作用: 提供Log4j日志框架的核心功能。
    -详细说明: Log4j是一个用于Java应用程序的灵活的日志框架,log4j-core包含了其核心的日志处理功能。

  • 中慧教学实训平台提供了文件的上传和下载功能
    在这里插入图片描述

  • CentOS上Maven项目本地仓库默认位置(用户主目录/.m2/repository
    在这里插入图片描述

  • 刷新项目依赖
    在这里插入图片描述

  • 刷新之后,多一个Dependencies
    在这里插入图片描述

  • 查看项目依赖的外部库(External Libraries)
    在这里插入图片描述

4、添加资源文件

  • /opt目录里的core-site.xmlhdfs-site.xmllog4j.properties文件拷贝到项目的resources目录
    在这里插入图片描述
    在这里插入图片描述

5、创建包

  • src/main/java里创建net.huawei.usehdfs
    在这里插入图片描述

(三)使用Hadoop API操作HDFS文件系统

1、获取文件系统并配置在集群上运行

  • net.huawei.usehdfs包里创建HDFSBase
    在这里插入图片描述
  • 导入程序所需要的包
    在这里插入图片描述
  • 创建init()方法,获取在集群上运行的文件系统
    在这里插入图片描述
  • 运行init()方法
    在这里插入图片描述
  • 在控制台查看结果
    在这里插入图片描述

2、创建目录

  • 创建testMkdirs()方法
    在这里插入图片描述
  • 由于每次对于HDFS文件系统的操作都需要获取文件系统并配置在集群上运行,因此需要将上一个功能代码中的@Test修改为@Before,并将System.out.printIn(fileSystem);语句注释掉。
    在这里插入图片描述
  • 运行testMkdirs()方法,查看控制台结果
    在这里插入图片描述
  • 在Hadoop WebUI上查看创建的目录
    在这里插入图片描述
  • 利用HDFS Shell命令hdfs dfs -ls -R /查看
    在这里插入图片描述

3、上传文件

  • 创建testCopyFromLocal()方法
    在这里插入图片描述
  • testCopyFromLocal()方法,查看结果
    在这里插入图片描述
  • 查看上传的文件内容
    在这里插入图片描述

4、下载文件

  • 创建testCopyToLocal()方法
    在这里插入图片描述

  • 运行testCopyToLocal()方法,查看结果
    在这里插入图片描述

  • 在desktop节点上查看下载的文件
    在这里插入图片描述

  • 在desktop节点上查看下载的文件内容
    在这里插入图片描述

5、删除文件/目录

  • 创建testDeleteFile()方法,删除/idea/mkdir/directory/data.txt文件
    在这里插入图片描述

  • 运行testDeleteFile()方法,查看结果
    在这里插入图片描述

  • 查看/idea/mkdir/directory/data.txt文件,报错说文件不存在
    在这里插入图片描述

  • 修改代码,删除/idea/mkdir/directory目录
    在这里插入图片描述

  • 运行testDeleteFile()方法,查看结果
    在这里插入图片描述

  • 查看/idea/mkdir/directory目录,报错说目录不存在
    在这里插入图片描述

6、列出指定路径下的文件和目录

  • 创建testListAllStatus()方法
    在这里插入图片描述
  • 运行testListAllStatus()方法,查看结果
    在这里插入图片描述
  • 上传anaconda-ks.cfg到HDFS根目录
    在这里插入图片描述
  • 运行testListAllStatus()方法,查看结果
    在这里插入图片描述

7、查看完整代码

java">package net.huawei.usehdfs;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;

public class HDFSBase {

    private FileSystem fileSystem;
    private Configuration configuration;

    /**
     * 获取文件系统并配置在集群上运行
     * @throws IOException
     * @throws InterruptedException
     */
    @Before
    public void init() throws IOException, InterruptedException {
        //1、获取文件系统
        configuration = new Configuration();
        //2、配置在集群上运行
        String uri = "hdfs://mycluster:8020";
        fileSystem = FileSystem.get(URI.create(uri), configuration, "root");
        //System.out.println(fileSystem);
    }

    /**
     * 创建目录
     * @throws IOException
     */
    @Test
    public void testMkdirs() throws IOException {
        //3、创建目录
        Path path = new Path("/idea/mkdir/directory");
        fileSystem.mkdirs(path);
        fileSystem.close();
    }

    /**
     * 上传文件
     * @throws IOException
     */
    @Test
    public void testCopyFromLocal() throws IOException {
        //3、从本地上传文件到hdfs文件系统
        // Path src 要上传的文件的路径(本地文件系统中的路径)
        Path src = new Path("/opt/data.txt");
        // Path dst 将文件上传到的路径(hdfs文件系统中的路径)
        Path dst = new Path("/idea/mkdir/directory");
        fileSystem.copyFromLocalFile(src, dst);
        fileSystem.close();
        System.out.println("文件上传成功~" + dst.toString() + "/" + src.getName());
    }

    /**
     * 下载文件
     * @throws IOException
     */
    @Test
    public void testCopyToLocal() throws IOException {
        //3、从hdfs文件系统将文件下载到本地
        // Path src 文件在hdfs文件系统中的路径(hdfs文件系统中的路径)
        Path src = new Path("/idea/mkdir/directory/data.txt");
        // Path dst 要下载的文件的路径(本地文件系统中的路径)
        Path dst = new Path("/usr/local/src/data.txt");
        fileSystem.copyToLocalFile(src, dst);
        fileSystem.close();
        System.out.println("文件下载成功~" + dst.toString());
    }

    /**
     * 删除文件/目录
     * @throws IOException
     */
    @Test
    public void testDeleteFile() throws IOException {
        //3、删除hdfs文件系统中的文件或目录
        Path path = new Path("/idea/mkdir/directory");
        //判断是否是目录
        boolean directory = fileSystem.isDirectory(path);
        //判断是否是文件
        boolean file = fileSystem.isFile(path);
        //如果是目录,则删除目录
        if(directory){
            boolean deleteDirectory = fileSystem.delete(path, true);
            if(deleteDirectory){
                System.out.println("该路径是个目录,删除目录成功!");
            }
        }
        //如果是文件,则删除文件
        if(file){
            boolean deleteFile = fileSystem.delete(path, true);
            if(deleteFile) {
                System.out.println("该路径是个文件,删除文件成功!");
            }
        }
        fileSystem.close();
    }

    /**
     * 列出指定路径下的文件和目录
     * @throws IOException
     */
    @Test
    public void testListAllStatus() throws IOException {
        //3、列出hdfs文件系统中指定路径下所有的目录和文件
        Path path = new Path("/");
        FileStatus[] fileStatuses = fileSystem.listStatus(path);
        for (FileStatus fileStatus : fileStatuses) {
            //如果是文件,则输出文件
            if(fileStatus.isFile()){
                System.out.println("文件:"+fileStatus.getPath().getName());
            }
            //如果是目录,则输出目录
            if(fileStatus.isDirectory()){
                System.out.println("目录:"+fileStatus.getPath().getName());
            }
        }
        fileSystem.close();
    }
}

(四)使用Hadoop API + Java IO流操作HDFS文件系统

1、获取文件系统并配置在集群上运行

2、上传文件(IO流)

3、读取文件(IO流)

4、下载文件(IO流)

5、辅助代码


http://www.niftyadmin.cn/n/5252152.html

相关文章

抖音商家电话采集如何用爬虫软件实现

随着互联网的发展&#xff0c;越来越多的商家开始在抖音上开设店铺。本文将介绍如何用爬虫软件实现抖音商家电话采集。 第一步&#xff1a;安装Python爬虫框架 Python爬虫框架有很多&#xff0c;比如Scrapy、BeautifulSoup等。本文选择使用Scrapy框架&#xff0c;因为它具有强…

SOP(标准作业程序)和WI(操作指导书)的联系和区别

目录 1.SOP&#xff08;标准作业程序&#xff09;&#xff1a;2.WI&#xff08;操作指导书&#xff09;&#xff1a;3.SOP和WI的区别&#xff1a; 1.SOP&#xff08;标准作业程序&#xff09;&#xff1a; SOP: 所谓SOP&#xff0c;是 Standard Operation Procedure三个单词中…

Nginx 简单入门操作

前言:之前的文章有些过就不罗嗦了。 Nginx 基础内容 是什么? Nginx 是一个轻量级的 HTTP 服务器,采用事件驱动、异步非阻塞处理方式的服务器,它具有极好的 IO 性能,常用于 HTTP服务器(包含动静分离)、正向代理、反向代理、负载均衡 等等. Nginx 和 Node.js 在很多方…

使用SQL获取oracle表结构语句(DDL语句)

要获取Oracle数据库中特定库&#xff08;Schema&#xff09;中对象的DDL语句&#xff0c;可以使用以下SQL查询来获取指定对象的DDL&#xff1a; 获取表&#xff08;Table&#xff09;的DDL语句&#xff1a; SELECT DBMS_METADATA.GET_DDL(TABLE, table_name) AS table_ddl FR…

Python轴承故障诊断 (二)连续小波变换CWT

目录 前言 1 连续小波变换CWT原理介绍 1.1 CWT概述 1.2 CWT的原理和本质 2 基于Python的CWT实现与参数对比 2.1 代码示例 2.2 参数介绍和选择策略 2.2.1 尺度长度&#xff1a; 2.2.2 小波函数&#xff08;wavelet&#xff09;&#xff1a; 2.3 凯斯西储大学轴承数据的…

深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用

文章目录 1. 引言2. PathVariable&#xff1a;处理路径变量2.1 简介2.2 使用示例 3. RequestParam&#xff1a;处理请求参数3.1 简介3.2 使用示例 4. RequestBody&#xff1a;处理请求体4.1 简介4.2 使用示例 5. 多个注解的组合使用6. 参数绑定的原理6.1 HandlerMethodArgument…

基于Python的图书管理系统的设计与实现

点我完整下载&#xff1a;基于Python的图书管理系统的设计与实现.docx 基于Python的图书管理系统的设计与实现 Design and Implementation of a Book Management System based on Python 目录 目录 2 摘要 3 关键词 3 第一章 引言 4 1.1 研究背景 4 1.2 研究目的 5 1.3 研究意义…

python的列表list

一.添加 [rootrhel8 day04]# vim demo03.py team [a] #添加 team.append(b) print(team) [rootrhel8 day04]# python3 demo03.py [a, b]二.insert添加 [rootrhel8 day04]# vim demo03.py team [a] #添加 team.append(b) print(team) #insert 添加 team.insert(1,"c…