>>分享SPSS,Hadoop等大数据处理技术,以及分布式架构以及集群系统的构建 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22271 个阅读者 刷新本主题
 * 贴子主题:  Hadoop与Spring的集成 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2024-03-29 11:22:00     消息  查看  搜索  好友  邮件  复制  引用

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工程,配置依赖如下:


<repositories>
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>${hadoop.version}</version>
      <scope>provided</scope>
    </dependency>
    <!-- 添加UserAgent解析的依赖 -->
    <dependency>
      <groupId>com.kumkee</groupId>
      <artifactId>UserAgentParser</artifactId>
      <version>0.0.1</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    <!-- 添加Spring Hadoop的依赖 -->
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-hadoop</artifactId>
      <version>2.5.0.RELEASE</version>
    </dependency>
  </dependencies>

  <!-- mvn assembly:assembly -->
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <archive>
            <manifest>
              <mainClass></mainClass>
            </manifest>
          </archive>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

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


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:hdp="http://www.springframework.org/schema/hadoop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/hadoop
        http://www.springframework.org/schema/hadoop/spring-hadoop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 加载属性文件 -->
    <context:property-placeholder location="application.properties"/>
    <hdp:configuration id="hadoopConfiguration">
        <!-- 服务器的url -->
        fs.defaultFS=${spring.hadoop.fsUri}
    </hdp:configuration>
    <!-- 装配文件系统bean以及操作用户 -->
    <hdp:file-system id="fileSystem" configuration-ref="hadoopConfiguration" user="root"/>
</beans>

  然后再创建一个属性文件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.log
drwxr-xr-x   - root supergroup          0 2018-04-04 17:50 /SpringHDFS
drwxr-xr-x   - root supergroup          0 2018-04-02 21:22 /browserout
drwxr-xr-x   - root supergroup          0 2018-04-02 20:29 /data
drwxr-xr-x   - root supergroup          0 2018-04-02 20:31 /logs
drwx------   - root supergroup          0 2018-04-02 20:39 /tmp
drwxr-xr-x   - root supergroup          0 2018-04-02 20:39 /user
[root@hadoop000 ~]# hdfs dfs -ls /SpringHDFS
[root@hadoop000 ~]#

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

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


/**
* 读取HDFS上的文件内容
* @throws Exception
*/

@Test
public void testText()throws Exception{
    FSDataInputStream in = fileSystem.open(new Path("/browserout/part-r-00000"));
    IOUtils.copyBytes(in, System.out, 1024);
    in.close();
}

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


Chrome  2775
Firefox 327
MSIE    78
Safari  115
Unknown 6705

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

Spring Boot访问HDFS文件系统

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

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


<!-- 添加Spring Boot的依赖 -->
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-hadoop-boot</artifactId>
  <version>2.5.0.RELEASE</version>
</dependency>

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
**/

@SpringBootApplication
public 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

----------------------------
原文链接:https://blog.51cto.com/zero01/2094901
  Java面向对象编程-->数组
  JavaWeb开发-->使用Session(Ⅰ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->安全网络通信
  精通Spring-->Vue Router路由管理器
  Vue3开发-->通过Axios访问服务器
  Redis服务器重要属性详解
  推荐系统的设计
  基于spark-streaming实时推荐系统
  使用Ambari搭建Hadoop集群
  TiDB在360的落地及实战干货
  MapReduce自定义分区实现
  合并两套环境的FastDFS数据
  如何面对高并发?缓存?中台为什么会火?
  Hadoop配置项整理(hdfs-site.xml)
  Hadoop 之 HDFS
  大数据分布式平台Hadoop2.7.7 + Spark2.2.2搭建
  快速部署DBus体验实时数据流计算
  超详细的Hadoop2配置详解
  将 Java 应用程序扩展到移动领域和云
  数据仓库的两种建模方法
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。