Spark中IDEA Maven工程创建与配置

一、IDEA Maven工程创建与配置

在学习spark之前,我们需要在IDEA 工具上创建Scala文件,上传至服务器,测试spark。以下为操作步骤:
第一步:创建maven工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第二步:添加Scala
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三步:创建Scala文件
在这里插入图片描述
在这里插入图片描述
注意这个Scala文件夹要选择Source类型,不然在运行Scala时候会错误: 找不到或无法加载主类。
第四步:配置pom.xml文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里要注意的是hadoop.version对应自己服务器里面的Hadoop的version、scala.version对应自己本机的Scala的版本,细心的话会发现我在第二步:添加Scala的时候用的是2.12.8,但是这里用的是2.11.12,具体原因是什么,我会在后面解释到、saprk.version对应自己服务器中spark的版本。添加好配置文件之后,可能都会报红色,原因是没有下载,按照上图步骤maven会自动下载。

若出现下载失败,则可能是阿里源的镜像地址更新了,在maven的settings.xml文件里修改:

<mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>https://maven.aliyun.com/repository/public</url>
</mirror>

全部下载成功之后则不会出现红色!
想添加配置文件请参考GitHub的网址:
https://github.com/apache/spark/blob/master/examples/pom.xml

我的pom.xml文件如下:

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming-kafka-0-10_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql-kafka-0-10_${scala.binary.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
    </dependencies>

以上就是spark的配置文件,下面要开发spark的测试程序

二、开发Spark Application程序并进行本地测试

所开发的程序是词频统计,读取test文件,统计文件中每一个单词的数量

package com.spark.test

import org.apache.spark.sql.SparkSession

/**
 * @author : 蔡政洁
 * @email :caizhengjie888@icloud.com
 * @date : 2020/9/7
 * @time : 1:36 下午
 */
object Test {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder
      .master("local")
      .appName("HdfsTest")
      .getOrCreate()

    // RDD方式
    // /Users/caizhengjie/Desktop/test.txt
    val filePath = args(0)
    val rdd = spark.sparkContext.textFile(filePath)
    val lines = rdd
      .flatMap(x => x.split(" "))
      .map(x => (x,1))
      .reduceByKey((a,b) => (a+b))
      .collect()
      .toList

    println(lines)

    // DataSet方式
    import spark.implicits._
    val dataSet = spark.read
      .textFile(filePath)
      .flatMap(x => x.split(" "))
      .map(x => (x,1))
      .groupBy("_1")
      .count()
      .show()
  }
}

这是在本地的运行结果:
在这里插入图片描述

三、生成Jar包并提交spark-submit运行

在本地运行成功之后,我们需要将文件打成jar包,上传到上传到服务器,在服务器端运行,提交spark-submit任务。
在这里插入图片描述
在打包的过程中需要将这里面的文件全部删除,只留sparkTest compile output这一个文件。打包过之后上传到服务器/opt/jars,开始运行:
进入到/opt/Hadoop/spark路径下

bin/spark-submit --class com.spark.test.Test --master local[2] /opt/jars/sparkTest.jar /opt/datas/stu.txt 

在这里插入图片描述
运行成功!
有关命令参数的介绍可详见:
http://spark.apache.org/docs/2.4.6/submitting-applications.html

四、问题分析与解决

问题一:Failed to load com.spark.test.Test

在这里插入图片描述
当执行命令时出现这个错误,原因是在打包jar包时,没有删除其他的jar文件,导致加载不到我们自己的那个类,那么在IDEA中,该如何删除多余的jar文件呢:

鼠标左击第一个文件,按住shift,鼠标左击最后一个,点减号就能删除

问题二:Scala版本不匹配

在这里插入图片描述
当再次执行命令时,会出现上面的错误,我查找了网上各类的教程,是发现Scala的版本和spark中Scala的版本不一致所导致的。
我在/opt/Hadoop/spark/jars这个文件下查看:
在这里插入图片描述
果然spark中的Scala的版本是2.11.12。
而我自己电脑本机的Scala的版本是2.12.8,因此打jar包的时候,用的Scala的版本也是2.12.8,所以在运行命令的时候会报错。

所以我把本地的Scala 改成 2.11.12重新打包,要把原来的Scala 2.12.8 SDK 换成 Scala 2.11.12 SDK
除了修改Scala SDK的版本还需要修改pom.xml的版本号:

<properties>
  <scala.version>2.11.12</scala.version>
</properties>

最后重新编译一下,打成jar包,重新上传到服务器,就能发现这次是能成功运行出结果!

参考文章:


以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<一蓑烟雨任平生>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值