原创

记一次Spark与SpringBoot的整合

在Java的世界里,最不缺乏的就是想象力!当Spark遇上Spring Boot,又会发生怎样的故事呢!😋

基于 Java8 + Scala + Spark+Spring Boot 充分利用起SpringBoot注解开发的便利,IOC等等Bean对象管理的优势,构建定制化Spark任务管理服务。😋

起一个常驻集群的Spark+SpringBoot 服务,以API的方式,手动或定时触发我们的Spark任务,避免繁琐冗长的Submit命令,避免一次又一次的资源申请,实时监控任务运行,及时得到运行反馈。使非开发人员,点点拽拽,也可以运行我们的日常业务,操作我们的大数据平台。😋


Gitee https://gitee.com/leojie/spark-spring-boot



技术栈 介龙平博客 | 一个程序员的个人博客










功能特性

  • [x] Spark与SpringBoot集成,解决了冲突依赖
  • [x] Spring Bean对象池集中管理SparkSession对象
  • [x] 依赖注入Scala类
  • [x] java与Scala代码互相调用
  • [x] maven混合java Scala编译打包
  • [x] spark-submit提交,常驻集群,API方式,运行spark任务

我的环境

开发环境

  • MacOs 10.14.5
  • jdk 1.8
  • scala 2.11.8
  • spark 2.4.3
  • idea 2019.1.2

测试集群环境

  • centos7
  • jdk1.8
  • scala 2.11.8
  • hadoop 2.7.4
  • spark 2.4.3
  • hive 3.1.1

测试集群配置

项目结构

技术栈

  • jdk 1.8
  • maven 3.6.1
  • SpringBoot 1.5.6
  • spark 2.4.3
  • hive 3.4.1
  • ...

开始使用

  1. 使用IDE导入本项目,更新pom,导入依赖
  2. 替换集群配置文件为自己的
  3. mvn clean package 打包

//集群运行时注意修改
@Bean
    @ConditionalOnMissingBean(SparkSession.class)
    public SparkSession sparkSession() throws Exception {
        return SparkSession.builder()
                .appName("FastKettle")
                //.master("local[4]")
                .enableHiveSupport()
                .getOrCreate();
    }
  1. 提交集群运行

spark-submit --class com.dr.leo.demo.SparkSpringApplication --executor-memory 4G --num-executors 4 --master yarn --deploy-mode client spark-spring-0.0.1-SNAPSHOT.jar

运行测试

服务启动后如图

postman 测试

WordCount

操作hive中的表

java scala互相调用

依赖注入

总结

以上操作便完成了SpringBoot与Spark的整合,如有不妥之处,还望指正。

Spark与Spring Boot的整合,结合两者的优点,具体可以发挥怎样的效果,还需要结合公司业务或自己的需求,自由想象。

整合过程中遇到的最大问题,其实是SpringBoot与集群之间的包冲突。经过反复测试,比较兼容的一个SpringBoot版本是1.5.6。2.0以上版本的未经严格测试,依赖包冲突的貌似比较多,或需要排更多的依赖包。

正文到此结束