在Java的世界里,最不缺乏的就是想象力!当Spark遇上Spring Boot,又会发生怎样的故事呢!😋
基于 Java8
+ Scala
+ Spark
+Spring Boot
充分利用起SpringBoot注解开发的便利,IOC等等Bean对象管理的优势,构建定制化Spark任务管理服务。😋
起一个常驻集群的Spark+SpringBoot 服务,以API的方式,手动或定时触发我们的Spark任务,避免繁琐冗长的Submit命令,避免一次又一次的资源申请,实时监控任务运行,及时得到运行反馈。使非开发人员,点点拽拽,也可以运行我们的日常业务,操作我们的大数据平台。😋
github https://github.com/CCweixiao/spark-spring
- Spark与SpringBoot集成,解决了冲突依赖
- Spring Bean对象池集中管理SparkSession对象
- 依赖注入Scala类
- java与Scala代码互相调用
- maven混合java Scala编译打包
- 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
- ...
- 使用IDE导入本项目,更新pom,导入依赖
- 替换集群配置文件为自己的
- mvn clean package 打包
//集群运行时注意修改
@Bean
@ConditionalOnMissingBean(SparkSession.class)
public SparkSession sparkSession() throws Exception {
return SparkSession.builder()
.appName("FastKettle")
//.master("local[4]")
.enableHiveSupport()
.getOrCreate();
}
- 提交集群运行
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以上版本的未经严格测试,依赖包冲突的貌似比较多,或需要排更多的依赖包。