SpringBoot 接入 Spark
Posted 我有一只肥螳螂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 接入 Spark相关的知识,希望对你有一定的参考价值。
本文主要介绍 SpringBoot 与 Spark 如何对接,具体使用可以参考文章 SpringBoot 使用 Spark
pom 文件添加 maven 依赖
- spark-core:spark 的核心库,如:SparkConf
- spark-sql:spark 的 sql 库,如:sparkSession
- janino: Janino 是一个极小、极快的 开源Java 编译器,若不添加,spark 获取 mysql 或 JSON 数据时会报错
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/codehaus/janino/InternalCompilerExceptio
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.13</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.13</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.8</version>
</dependency>
application.yml 添加 spack 配置,master 使用 local 不需要搭建 spark,方便学习与测试
spark:
app:
name: fat
master:
uri: local[*]
配置 SparkConfig
- sparkConf:Spark 基础信息配置
- JavaSparkContext:基于 sparkConf 生成,用于
- SparkSession:基于 SparkContext 生成
@Configuration
public class SparkConfig
@Value("$spark.app.name")
private String appName;
@Value("$spark.master.uri")
private String sparkMasterUri;
@Bean
public SparkConf sparkConf()
SparkConf sparkConf = new SparkConf()
.setAppName(appName)
.setMaster(sparkMasterUri);
return sparkConf;
@Bean
@ConditionalOnMissingBean(JavaSparkContext.class)
public JavaSparkContext javaSparkContext()
return new JavaSparkContext(sparkConf());
@Bean
public SparkSession sparkSession()
return SparkSession
.builder()
.sparkContext(javaSparkContext().sc())
.getOrCreate();
-
SparkContext:从Spark1.x开始,Spark SparkContext是Spark的入口点,用于在集群上以编程方式创建Spark RDD、累加器和广播变量。是spark执行环境的客户端,是spark执行作业的入口点,是spark应用程序的主控。
-
SparkSession:从Spark2.0开始,SparkSession已经成为Spark处理RDD、DataFrame 和 Dataset 的入口点。SparkSessio n封装了SparkConf、SparkContext和SQLContext。为了向后兼容,SQLContext和HiveContext也被保存下来。它实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在 SparkSession 上同样是可以使用的。SparkSession 内部封装了sparkContext,所以计算实际上是由 sparkContext 完成的。
-
SQLContext:在Spark version1.0中,为了处理结构化数据(行和列),SQLContext (org.apache.spark.sql.SQLContext )是一个入口点,但是在2.0版本中,SQLContext已经被SparkSession所取代。Apache Spark SQLContext是SparkSQL的入口点,Spark是Spark1.x中用于结构化数据(行和列)的Spark模块。正在处理。Spark SQLContext已初始化。
-
JavaSparkContext 是 Java友好版本的[org.apache.spark.SparkContext]返回[org.apache.spark.api.java.JavaRDD],并使用Java集合,而不是Scala集合。
以上是关于SpringBoot 接入 Spark的主要内容,如果未能解决你的问题,请参考以下文章