【spark学习】 spring boot 整合 spark

打印 上一主题 下一主题

主题 907|帖子 907|积分 2721

阐明

本例子是使用java语言实现的spark学习的案例笔记,整合springboot等干系框架。
使用当地算力进行计算。不需要安装hadoop。
主要用于在window体系下的开发学习。
环境


  • jdk 1.8
  • springboot 2.7.1
  • windows 体系
安装 winutils

下载所在: https://github.com/steveloughran/winutils
大概关注微信公众号:张家的小伙子,复兴关键字:winutils 来获取网盘下载所在.
下载完成后,解压出来到某个路径下。此处我解压到 G:\hadoop\
注意:此处的所在在以下的代码中使用到
解压得到以下结构的目次.以下目次对应的是各个版本的hadoop的bin目次。此处是使用的是3.0.0版本。

在pom.xml中导入依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.     <parent>
  7.         <groupId>org.springframework.boot</groupId>
  8.         <artifactId>spring-boot-starter-parent</artifactId>
  9.         <version>2.7.1</version>
  10.     </parent>
  11.     <groupId>org.example</groupId>
  12.     <artifactId>SpringBootSparkDemo</artifactId>
  13.     <version>1.0-SNAPSHOT</version>
  14.     <properties>
  15.         <java.version>8</java.version>
  16.         <maven.compiler.source>8</maven.compiler.source>
  17.         <maven.compiler.target>8</maven.compiler.target>
  18.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19.         <fastjson2.version>2.0.9</fastjson2.version>
  20.         <lombok.version>1.18.24</lombok.version>
  21.         <spring-boot-starter-test.version>3.3.5</spring-boot-starter-test.version>
  22.         <spring-boot-starter.version>2.7.1</spring-boot-starter.version>
  23.         <spark-core.version>3.5.3</spark-core.version>
  24.         <spark-sql.version>3.5.3</spark-sql.version>
  25.         <janino.version>3.1.12</janino.version>
  26.         <junit.version>4.13.2</junit.version>
  27.     </properties>
  28.     <dependencies>
  29.         <!-- fastjson2 -->
  30.         <dependency>
  31.             <groupId>com.alibaba.fastjson2</groupId>
  32.             <artifactId>fastjson2</artifactId>
  33.             <version>${fastjson2.version}</version>
  34.         </dependency>
  35.         <!-- lombok -->
  36.         <dependency>
  37.             <groupId>org.projectlombok</groupId>
  38.             <artifactId>lombok</artifactId>
  39.             <version>${lombok.version}</version>
  40.         </dependency>
  41.         <!--spring-boot-starter-->
  42.         <dependency>
  43.             <groupId>org.springframework.boot</groupId>
  44.             <artifactId>spring-boot-starter</artifactId>
  45.             <version>${spring-boot-starter.version}</version>
  46.         </dependency>
  47.         <!--spark start-->
  48.         <dependency>
  49.             <groupId>org.apache.spark</groupId>
  50.             <artifactId>spark-core_2.13</artifactId>
  51.             <version>${spark-core.version}</version>
  52.         </dependency>
  53.         <dependency>
  54.             <groupId>org.apache.spark</groupId>
  55.             <artifactId>spark-sql_2.13</artifactId>
  56.             <version>${spark-sql.version}</version>
  57.         </dependency>
  58.         <dependency>
  59.             <groupId>org.codehaus.janino</groupId>
  60.             <artifactId>janino</artifactId>
  61.             <version>${janino.version}</version>
  62.         </dependency>
  63.         <!--spark end-->
  64.         <dependency>
  65.             <groupId>org.springframework.boot</groupId>
  66.             <artifactId>spring-boot-starter-test</artifactId>
  67.             <version>${spring-boot-starter-test.version}</version>
  68.         </dependency>
  69.         <dependency>
  70.             <groupId>junit</groupId>
  71.             <artifactId>junit</artifactId>
  72.             <version>${junit.version}</version>
  73.             <scope>test</scope>
  74.         </dependency>
  75.     </dependencies>
  76.     <build>
  77.         <plugins>
  78.             <plugin>
  79.                 <groupId>org.apache.maven.plugins</groupId>
  80.                 <artifactId>maven-compiler-plugin</artifactId>
  81.                 <version>3.8.1</version>
  82.                 <configuration>
  83.                     <source>1.8</source>
  84.                     <target>1.8</target>
  85.                     <encoding>UTF-8</encoding>
  86.                 </configuration>
  87.             </plugin>
  88.             <plugin>
  89.                 <groupId>org.springframework.boot</groupId>
  90.                 <artifactId>spring-boot-maven-plugin</artifactId>
  91.                 <configuration>
  92.                     <includeSystemScope>true</includeSystemScope>
  93.                     <excludes>
  94.                         <exclude>
  95.                             <groupId>org.projectlombok</groupId>
  96.                             <artifactId>lombok</artifactId>
  97.                         </exclude>
  98.                     </excludes>
  99.                 </configuration>
  100.             </plugin>
  101.         </plugins>
  102.     </build>
  103. </project>
复制代码
创建SparkConfig类

此类主要用于声明spark的配置,包罗spark的运行模式,spark的运行环境等。
  1. import org.apache.spark.SparkConf;
  2. import org.apache.spark.api.java.JavaSparkContext;
  3. import org.apache.spark.sql.SparkSession;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.context.annotation.Configuration;
  7. /**
  8. * spark配置类
  9. */
  10. @Configuration
  11. public class SparkConfig {
  12.     // 从配置文件中注入Spark应用的名称
  13.     @Value("${spark.app.name}")
  14.     private String appName;
  15.     // 从配置文件中注入Spark master的URL
  16.     @Value("${spark.master.url}")
  17.     private String masterUrl;
  18.     /**
  19.      * 配置SparkConf对象,声明Spark应用的运行模式和运行环境
  20.      * @return SparkConf 返回spark配置对象
  21.      */
  22.     @Bean
  23.     public SparkConf sparkConf() {
  24.         // 在步骤:准备hadoop环境 中方案2的地址,可以根据自己电脑的实际情况修改。此处使用的是hadoop-3.0.0的版本。
  25.         System.setProperty("hadoop.home.dir", "G:\\hadoop\\winutils-master\\hadoop-3.0.0");
  26.         // 创建SparkConf对象
  27.         return new SparkConf()
  28.                 .setAppName(appName)
  29.                 .setMaster(masterUrl);
  30.     }
  31.     /**
  32.      * JavaSparkContext 是 Apache Spark 提供的一个类,用于创建和管理 Spark 上下文。
  33.      * 它是 Spark 应用程序的入口点,提供了与 Spark 集群交互的能力
  34.      * @return
  35.      */
  36.     @Bean
  37.     public JavaSparkContext sparkContext() {
  38.         return new JavaSparkContext(sparkConf());
  39.     }
  40.     /**
  41.      * SparkSession 是 Apache Spark 2.x 版本中引入的一个统一的入口点,用于创建 DataFrame、Dataset 和 SQL 查询。
  42.      * 它封装了 Spark 的各种上下文(如 SparkContext、SQLContext 等)
  43.      */
  44.     @Bean
  45.     public SparkSession sparkSession() {
  46.         return SparkSession.builder().sparkContext(sparkContext().sc()).getOrCreate();
  47.     }
  48. }
复制代码
配置参数

在application.yml文件中添加如下配置:
  1. # spark相关配置
  2. spark:
  3.   # spark应用配置
  4.   app:
  5.     # 应用名称
  6.     name: sparkDemo
  7.   # spark master主节点配置
  8.   master:
  9.     # 主节点运行模式配置,可选值:local、yarn、mesos、k8s
  10.     # 此处使用本地模式
  11.     url: local[*]
  12. # 日志配置
  13. logging:
  14.   # 日志级别
  15.   level:
  16.     # 根日志级别。 off:关闭springboot的日志,本地学习时关闭后可以更清楚查看spark的日志输出
  17.     root: off
复制代码
测试整合效果

创建一个定时使命类,用于测试整合是否乐成。
[code][/code] 输出词频统计效果如下图。阐明已经乐成整合:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表