一、前言
首先說明一下,這個框架的整合可能對大神來說十分容易,但是對我來說十分不易,踩了不少坑。雖然整合的時間不長,但是值得來紀念下!!!我個人開發工具比較喜歡IDEA,創建的springboot的java工程再引入scala的library之后當前工程即可創建java文件又可創建scala文件,這個一個工程里可采用java+scala雙語言來開發。用了這個框架搭建成功后給我們開發spark代碼能帶來什么便利之處?
1、springboot可以開發非web項目,與spark不相關的代碼可以采用java來開發,比如訪問數據庫,中間件等,用java十分便利。
2、spark相關開發采用scala語言代碼量更少,開發效率更高。
主要基於以上兩點,搭建這個框架還是具有不小的意義。
二、搭建過程
1、利用maven引入springboot的基礎jar包
2、利用maven引入spark相關jar包
3、利用maven引入解決沖突的jar包
完整pom文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<groupId>ba</groupId>
<artifactId>SparkTest01</artifactId>
<version>1.0-SNAPSHOT</version>
<name>SparkTest01</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spark.version>2.1.0</spark.version>
<hadoop.version>2.7.4</hadoop.version>
<springboot.version>2.0.0.RELEASE</springboot.version>
</properties>
<dependencies>
<!--spark框架開始-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--spark框架結束-->
<!--springboot開始 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${springboot.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>${springboot.version}</version>
</dependency>
<!-- springboot框架結束-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--解決框架加載失敗 -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<!--解決框架加載失敗 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- springboot maven打包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
注意:1、黃色標記是作用是jar包沖突。
2、青色標記是解決框架引入失敗的問題。
三、實測結果
四、打jar包發布至spark平台
坑:將spark安裝包里的gson-2.2.4.jar從jars目錄移除!!!
打包打用的spring-boot-maven-plugin插件,將jar放至spark服務器上,提交代碼時指定類為springboot的啟動代理類--class org.springframework.boot.loader.JarLauncher。以下是提交命令:
spark-submit --class org.springframework.boot.loader.JarLauncher SparkStudy01-1.0-SNAPSHOT.jar
以下是運行的結果: