目录
一、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包,重新上传到服务器,就能发现这次是能成功运行出结果!
参考文章:
- https://blog.csdn.net/qq_35688140/article/details/86717600
- https://blog.csdn.net/David_house/article/details/106742697
- https://blog.csdn.net/weixin_30439067/article/details/99388592
以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!