maven 构建 spark scala archetype

背景

spark maven项目构建不像flink一样官方提供了各个版本的maven archetype, 方便在本地构建相应的项目. 由于官方没有, 所以只能自己基于一个基础的spark scala项目构建maven archetype.

基于scala archetype 构建基础项目

spark scala项目是基于scala项目构建, 所以选择最基本的scala archetype构建项目 再往其中添加spark运行所需的基本依赖包(spark-core, spark-mllib等按需求添加即可)

scala archetype

构建好scala项目并加入spark本地开发依赖的对应版本的Jar包,我选择的spark是最新的3.0版本且scala对应的是2.12版本. 加入spark-core和相关的mllib以及删除不必要的dependencies之后的pom.xml文件如下:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.myspark</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <inceptionYear>2008</inceptionYear>
  <properties>
    <scala.version>2.12.11</scala.version>
    <spark.version>3.0.0</spark.version>
    <spark.scala.version>2.12</spark.scala.version>
  </properties>

  <repositories>
    <repository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </pluginRepository>
  </pluginRepositories>

  <dependencies>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.4</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${spark.scala.version}</artifactId>
      <version>${spark.version}</version>
      <!-- do not packaged to jar-->
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-mllib_${spark.scala.version}</artifactId>
      <version>${spark.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-mllib-local_${spark.scala.version}</artifactId>
      <version>${spark.version}</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <sourceDirectory>src/main/scala</sourceDirectory>
    <testSourceDirectory>src/test/scala</testSourceDirectory>
  </build>

</project>

在此基础项目上构建spark scala archetype

构建archetype

参考官方关于archetype的使用archetype plugin
首先在项目根目录执行mvn archetype:create-from-project
之后会在target/generated-sources/archetype
下面生成一个pom.xml文件 内容如下:

<?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>

  <groupId>org.myspark</groupId>
  <artifactId>test-archetype</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>maven-archetype</packaging>

  <name>test-archetype</name>

  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.archetype</groupId>
        <artifactId>archetype-packaging</artifactId>
        <version>3.2.0</version>
      </extension>
    </extensions>

    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-archetype-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

在这一步的时候 有可能遇到报错 settings.xml不存在的情况, 原因是.m2文件夹下没有配置全局的settings.xml. 这个比较好解决, 将maven所在目录的conf下面的settings.xml拷贝一份放到.m2文件夹下即可(要注意的是repository的配置路径 一般默认放.m2下面). target下面的archetype构建好之后 就可以在该目录下使用mvn install 安装在本地了. 值得注意的是生成的pom.xml文件可以更改其artifactId和 name 改成自己想要的即可.

<groupId>org.myspark</groupId>
  <artifactId>spark-quickstart-scala</artifactId>
  <version>1.0</version>
  <packaging>maven-archetype</packaging>
  <name>spark-quickstart-scala</name>

target/generated-sources/archetype 目录下执行mvn install
发现在.m2/repository 目录下增加了archetype的 pom.xml 文件

然后在一个新的空文件夹下面用刚才安装的archetype构建项目即可

archetype
写个spark程序测试一下:

object MyApp extends App {

    val conf = new SparkConf().setAppName("MyApp").setMaster("local")
    val sc = new SparkContext(conf)
    val res = sc.parallelize(Array(
        Vectors.dense(1.0, 2.0),
        Vectors.dense(4.0,5.0),
        Vectors.dense(7.0, 8.0)))
    val mat = new RowMatrix(res)
    println(mat.rows.count())
    sc.stop()
}

运行结果:

20/07/22 22:51:09 INFO SparkUI: Stopped Spark web UI at http://192.168.168.104:4040
3
20/07/22 22:51:09 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!

注意, 依赖的spark相关的jar包scope是provided.

<dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${spark.scala.version}</artifactId>
      <version>${spark.version}</version>
      <!-- do not packaged to jar-->
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-mllib_${spark.scala.version}</artifactId>
      <version>${spark.version}</version>
      <scope>provided</scope>

为了不让打包进程序. 所以本地idea运行的时候别忘了勾选
provided

网上也有比较多的文章描述了怎么把archetype部署到私服等等.此处不再赘述, 只是做这个样一个简单的spark-quickstart-scala的archtype(像flink一样)方便快速构建spark-scala项目.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值