SpringBoot集成Hadoop实现文件的上传和下载功能

 更新时间:2024年07月11日 12:07:37   作者:街角等待  
Spring Hadoop简化了Apache Hadoop,提供了一个统一的配置模型以及简单易用的API来使用HDFS、MapReduce、Pig以及Hive,这篇文章主要介绍了SpringBoot集成Hadoop实现文件的上传和下载,需要的朋友可以参考下

Spring Hadoop简单概述

Spring Hadoop官网地址如下:

https://projects.spring.io/spring-hadoop/

Spring Hadoop简化了Apache Hadoop,提供了一个统一的配置模型以及简单易用的API来使用HDFS、MapReduce、Pig以及Hive。还集成了其它Spring生态系统项目,如Spring Integration和Spring Batch.。

特点:

  • 支持创建Hadoop应用,配置使用依赖注入和运行标准的java应用程序和使用Hadoop的命令行工具
  • 集成Spring Boot,可以简单地创建Spring应用程序去连接HDFS进行读写数据。
  • 创建和配置,使用java的MapReduce,Streaming,Hive,Pig或HBase
  • 扩展Spring Batch支持创建基于Hadoop的工作流的任何类型的Hadoop Job或HDFS的操作。
  • 脚本HDFS操作使用任何基于JVM的脚本语言。
  • 基于SpringBoot轻松地创建自定义的基础应用,应用可以部署在YARN上。
  • 支持DAO,可以使用模板或回调的方式操作Hbase
  • 支持Hadoop安全验证

Springboot整合HBase数据库

安装Hadoop可参考:https://www.jb51.net/server/324127043.htm

1、pom文件中增加依赖

        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.3.6</version>
        </dependency>
		<!--需要指定hadoop-auth、hadoop-common版本,否则容易出现版本冲突-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-auth</artifactId>
            <version>3.3.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.3.6</version>
        </dependency>

2、在.yml配置文件中增加配置

hadoop:
  name-node: hdfs://test:8020

3、连接Hadoop库的配置类

import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.fs.FileSystem;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.URI;
/**
 * @description: Hadoop配置类
 * @version: 1.0
 */
@Configuration
@Slf4j
public class HadoopConfig {
    @Value("${hadoop.name-node}")
    private String nameNode;
    @Bean("fileSystem")
    public FileSystem fileSystem() {
        //读取配置文件
        org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
        conf.set("dfs.replication", "1");
        // 文件系统
        FileSystem fileSystem = null;
        // 返回指定的文件系统,如果在本地测试,需要使用此种方法获取文件系统
        try {
            URI uri = new URI(nameNode.trim());
            fileSystem = FileSystem.get(new URI(nameNode), conf, "root");
        } catch (Exception e) {
            log.error("文件系统获取发生异常", e);
        }
        return fileSystem;
    }
}

4、Hadoop工具类,实现文件的上传和下载

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.springframework.stereotype.Component;
import java.io.*;
/**
 * @description: hadoop操作类
 * @version: 1.0
 */
@Slf4j
@Component
public class HadoopUtil {
    @Resource
    private FileSystem fileSystem;
    /**
     * 上传文件
     * @param file 文件
     * @param destPath 上传的路径
     */
    public void uploadFile(File file, String destPath) {
        try (InputStream inputStream = new FileInputStream(file);
             FSDataOutputStream outputStream = fileSystem.create(new Path(destPath))) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            // 刷新输出流以确保所有数据都被写入HDFS
            outputStream.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * 下载文件
     * @param filePath 文件路径
     * @return InputStream 返回inputStream类型  根据自己的需求就行转换
     * @throws IOException
     */
    public InputStream download(String filePath) throws IOException {
        return fileSystem.open(new Path(filePath));
    }
    /**
     * 删除文件
     * @param filePath 文件路径
     * @throws IOException
     */
    public void deleteFile(String filePath) throws IOException {
        fileSystem.delete(new Path(filePath), true);
    }
}

5、测试

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.xxx.xxx.HadoopUtil;
import java.io.File;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
@Slf4j
@Service
public class Test {
	@Resource
    private HadoopUtil hadoopUtil;
	public String test(){
		// 一、本地文件上传hdfs
        File file = new File("/you/file/path/文件名");
        hadoopUtil.uploadFile(file, "/you/upload/path/文件名");
		// 二、下载hadoop中的文件并传为String
        try (InputStream in = hadoopUtil.download("/文件名")) {
            String str = new Scanner(in, StandardCharsets.UTF_8).useDelimiter("\\A").next();
            log.info("结果" + str);
        } catch (IOException e) {
            log.error("文件导出发生异常")
        }
    }
}

6、测试hdfs中是否存在文件

命令:hdfs dfs -ls /you-file-path

[root@test app]# hdfs dfs -ls /cda
Found 1 items
-rw-r--r--   1 root supergroup      23005 2024-07-08 17:13 /cda/EMR-SD-01-病历概要-T01-001.xml

到此这篇关于SpringBoot集成Hadoop实现文件的上传和下载的文章就介绍到这了,更多相关SpringBoot文件上传和下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot线程池监控的简单实现

    springboot线程池监控的简单实现

    本文主要介绍了springboot线程池监控的简单实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java启用Azure Linux虚拟机诊断设置

    Java启用Azure Linux虚拟机诊断设置

    这篇文章主要介绍了Java启用Azure Linux虚拟机诊断设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • mybatis查询语句揭秘之参数解析

    mybatis查询语句揭秘之参数解析

    这篇文章主要给大家介绍了关于mybatis查询语句之参数解析的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • springboot整合logback实现日志管理操作

    springboot整合logback实现日志管理操作

    本章节是记录logback在springboot项目中的简单使用,本文将会演示如何通过logback将日志记录到日志文件或输出到控制台等管理操作,感兴趣的朋友跟随小编一起看看吧
    2024-02-02
  • 如何把idea中的项目导入github仓库中(图文详解)

    如何把idea中的项目导入github仓库中(图文详解)

    这篇文章主要介绍了如何把idea中的项目导入github仓库中,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringCloudGateway 网关登录校验实现思路

    SpringCloudGateway 网关登录校验实现思路

    文章介绍了在微服务架构中使用Spring Cloud Gateway进行登录校验的方法,通过在网关层面进行登录校验,并将用户信息通过请求头传递给下游微服务,解决了每个微服务都需要独立进行登录校验的问题,此外,还讨论了如何在微服务之间传递用户信息
    2024-11-11
  • Mybatis中如何设置sqlSession自动提交

    Mybatis中如何设置sqlSession自动提交

    在MyBatis中,默认情况下,获取的SqlSession对象不会自动提交事务,这意味着在进行更新、删除或插入等操作后,需要显式调用commit方法来提交事务,但是,可以在获取SqlSession时通过将openSession方法的参数设置为true
    2024-09-09
  • SpringBoot整合mybatis/mybatis-plus实现数据持久化的操作

    SpringBoot整合mybatis/mybatis-plus实现数据持久化的操作

    这篇文章主要介绍了SpringBoot整合mybatis/mybatis-plus实现数据持久化,本节内容我们介绍了数据持久化的相关操作,并且是基础传统的关系型数据库——mysql,需要的朋友可以参考下
    2022-10-10
  • Mybatis Plus 增删改查的实现(小白教程)

    Mybatis Plus 增删改查的实现(小白教程)

    本文主要介绍了Mybatis Plus 增删改查,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • spring+mybatis 通过@ResponseBody返回结果中文乱码的解决方法

    spring+mybatis 通过@ResponseBody返回结果中文乱码的解决方法

    下面小编就为大家分享一篇spring+mybatis 通过@ResponseBody返回结果中文乱码的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12

最新评论