前几天有项目用到了大数据的计算服务,最后选了spark作大数据计算用版本用2.3.1,之前是大数据小白,没在项目里用过。项目用的是springboot,版本是2.0.3 踩了版本的太多坑了,版本号得写清楚了。
这次集成最重要的一件事是,查了好多帖子也都没有写到这一点的,如果是项目里不使用spark集群的话:
只需要在项目里集成spark的相关包,就可以在本机使用spark计算,不需要在服务器再搭建spark服务
一开始我先在服务器搭建了spark服务,配置好地址后,连接提交任务,任务一直显示执行中,worker也有,就是任务不会执行,日志里也看不到错误。我把spark的版本降到2.0后,本地运行报错,才找到问题。
private SparkSession initSparkSession()
{
return SparkSession
.builder()
.master("local[*]")
.config("spark.cores.max","2")
.config("spark.driver.maxResultSize","2g")
.appName("JavaWordCount")
.getOrCreate();
}
master使用local就可以,[]里的是多线程的意思,其他的config可以配置也可以不配置,都有默认配置。配置项最好参考官方文档,写的最清楚。
获取SparkSession后,就可以读取RDD然后计算了。
pom.xml中需要引入的jar包如下:
org.apache.spark
spark-core_2.11
2.3.1
slf4j-log4j12
org.slf4j
org.apache.spark
spark-sql_2.11
2.3.1
compile
因为springboot中的日志会和spark包中的slf4j包冲突,所以在引入的时候取消slf4j,如果不是springboot项目,不需要取消。
这样的话springboot和spark的集成就完成了。