千家信息网

Hadoop集成Spring的使用

发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,Spring Hadoop简单概述Spring Hadoop官网地址如下:https://projects.spring.io/spring-hadoop/Spring Hadoop简化了Apache
千家信息网最后更新 2025年02月24日Hadoop集成Spring的使用

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安全验证

Spring Hadoop2.5的官方文档及API地址:

https://docs.spring.io/spring-hadoop/docs/2.5.0.RELEASE/reference/html/
https://docs.spring.io/spring-hadoop/docs/2.5.0.RELEASE/api/


Spring Hadoop开发环境搭建及访问HDFS文件系统

创建一个maven工程,配置依赖如下:

          cloudera      https://repository.cloudera.com/artifactory/cloudera-repos/              true                    false                  UTF-8    2.6.0-cdh6.7.0              org.apache.hadoop      hadoop-client      ${hadoop.version}      provided                  com.kumkee      UserAgentParser      0.0.1              junit      junit      4.10      test                  org.springframework.data      spring-data-hadoop      2.5.0.RELEASE                            maven-assembly-plugin                                                                                        jar-with-dependencies                              

在工程中创建resource目录以及配置文件,配置文件的名可以自定义,配置文件中增加如下内容:

                            fs.defaultFS=${spring.hadoop.fsUri}            

然后再创建一个属性文件application.properties(文件名称可自定义),把一些容易改变的配置信息配置在属性文件下,例如我这里是将服务器的url配置在属性文件里,内容如下:

spring.hadoop.fsUri=hdfs://192.168.77.128:8020

完成以上操作之后,我们的Spring Hadoop开发环境就算是搭建完成了,毕竟使用Maven就是方便。

接下来我们来创建个测试类,测试一下是否能够正常对HDFS文件系统进行操作:

package org.zero01.spring;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/** * @program: hadoop-train * @description: 使用Spring Hadoop来访问HDFS文件系统 * @author: 01 * @create: 2018-04-04 17:39 **/public class SpringHadoopApp {    private ApplicationContext ctx;    private FileSystem fileSystem;    @Before    public void setUp() {        ctx = new ClassPathXmlApplicationContext("beans.xml");        fileSystem = (FileSystem) ctx.getBean("fileSystem");    }    @After    public void tearDown() throws IOException {        ctx = null;        fileSystem.close();    }    /**     * 在HDFS上创建一个目录     * @throws Exception     */    @Test    public void testMkdirs()throws Exception{        fileSystem.mkdirs(new Path("/SpringHDFS/"));    }}

以上的代码是执行成功的,然后到服务器上查看一下根目录下是否有SpringHDFS这个目录:

[root@hadoop000 ~]# hdfs dfs -ls /Found 7 items-rw-r--r--   3 root supergroup    2769741 2018-04-02 21:13 /10000_access.logdrwxr-xr-x   - root supergroup          0 2018-04-04 17:50 /SpringHDFSdrwxr-xr-x   - root supergroup          0 2018-04-02 21:22 /browseroutdrwxr-xr-x   - root supergroup          0 2018-04-02 20:29 /datadrwxr-xr-x   - root supergroup          0 2018-04-02 20:31 /logsdrwx------   - root supergroup          0 2018-04-02 20:39 /tmpdrwxr-xr-x   - root supergroup          0 2018-04-02 20:39 /user[root@hadoop000 ~]# hdfs dfs -ls /SpringHDFS[root@hadoop000 ~]# 

可以看到SpringHDFS目录已经成功被创建了,这就代表我们配置的工程没有问题。

既然创建目录没有问题,我们就再来写一个测试方法,用来读取HDFS上某个文件的内容,代码如下:

/** * 读取HDFS上的文件内容 * @throws Exception */@Testpublic void testText()throws Exception{    FSDataInputStream in = fileSystem.open(new Path("/browserout/part-r-00000"));    IOUtils.copyBytes(in, System.out, 1024);    in.close();}

以上的代码执行成功,控制台输出结果如下:

Chrome  2775Firefox 327MSIE    78Safari  115Unknown 6705

读和写都没有问题了,这下就能愉快的在工程里使用Spring Hadoop简化我们的开发了。


Spring Boot访问HDFS文件系统

以上介绍了Spring Hadoop访问HDFS,接下来再简单介绍一下使用Spring Boot访问HDFS,使用Spring Boot会更加简单。

首先需要在pom.xml文件中,加入Spring Boot的依赖:

  org.springframework.data  spring-data-hadoop-boot  2.5.0.RELEASE
package org.zero01.spring;import org.apache.hadoop.fs.FileStatus;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.data.hadoop.fs.FsShell;/** * @program: hadoop-train * @description: 使用spring boot来访问HDFS * @author: 01 * @create: 2018-04-04 18:45 **/@SpringBootApplicationpublic class SpringBootHDFSApp implements CommandLineRunner {    @Autowired    FsShell fsShell;  // 用于执行hdfs shell命令的对象    public void run(String... strings) throws Exception {        // 查看根目录下的所有文件        for (FileStatus fileStatus : fsShell.ls("/")) {            System.out.println("> " + fileStatus.getPath());        }    }    public static void main(String[] args) {        SpringApplication.run(SpringBootHDFSApp.class, args);    }}

控制台输出如下:

> hdfs://192.168.77.128:8020/> hdfs://192.168.77.128:8020/10000_access.log> hdfs://192.168.77.128:8020/SpringHDFS> hdfs://192.168.77.128:8020/browserout> hdfs://192.168.77.128:8020/data> hdfs://192.168.77.128:8020/logs> hdfs://192.168.77.128:8020/tmp> hdfs://192.168.77.128:8020/user
0