网上搜的教程要不不完整,要不就是出现各种错误,狠心写下这篇文章!在window上搭建spark开发环境,centos上面搭建spark生产环境。

环境以及版本:

  • window 10
  • idea 2020.1
  • Scala 2.12
  • spark 3.2.0

centos上面搭建spark环境这里不做介绍,主要介绍window上面开发环境搭建以及打包spark应用

1 下载Scala

下载详情自行搜索,下载后:
image.png
配置环境变量后:
image.png

2 IDEA下载Scala插件

image.png
导入Scala SDK
image.png
image.png

3 创建maven项目

image.png
image.png
image.png
image.png

4 修改pom.xml

修改Scala里面版本

原来:
image.png
修改后:
image.png
添加spark依赖
image.png

  1. <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
  2. <dependency>
  3. <groupId>org.apache.spark</groupId>
  4. <artifactId>spark-core_2.12</artifactId>
  5. <version>3.2.0</version>
  6. </dependency>

然后点击:
image.png

5 删除项目创建的无关文件

使用maven创建的spark项目会有一些无关文件,不删除会报错
删以下文件
image.png

6 编写spark测试程序

src\main\scala\org\example包下面新建一个Scala object,名为sparkTest
image.png
image.png
image.png


import org.apache.spark.{SparkConf, SparkContext}

def main(args: Array[String]): Unit = {
      val conf = new SparkConf().setAppName("WordCount")
      conf.setMaster("local")
      val sc = new SparkContext(conf)
      val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6)).map(_ * 3)
      val mappedRDD = rdd.filter(_ > 10).collect() //对集合求和
      println(rdd.reduce(_ + _)) //输出大于10的元素
      for (arg <- mappedRDD)
          print(arg + " ")
      println()
      println("math is work")
  }

运行项目:
image.png

7 打成jar包

方式一:IDEA打包

使用的是IDEA自带的打包方式
image.png
image.png
image.png

  • 注意修改MMETA-INF文件存放目录,不能使用默认路径,否则会报错

点击OK
image.png
image.png
image.png
打包后:
image.png
运行:
image.png

java -jar sparkDemo.jar(jar包名)

方式二(推荐):使用maven打包

方式一打包过于繁琐,而且打的jar包很大,下面使用maven方式打包
在pom.xml中添加以下内容

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <!--这里改成自己的启动位置(主类位置)-->
                <mainClass>org.example.sparkTest</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

maven可能报错:找不到maven-assembly-plugin,可以先加载依赖:

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-assembly-plugin -->
<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.3.0</version>
</dependency>

然后在添加插件

注意:<mainClass>......</mainClass>中改成主类位置,那么怎样查看主类路径?看下面:
当当前类运行后:
image.png
image.png
打包:
image.png
打包成功后:
image.png
我们就可以获得两个jar包,一个瘦包,一个胖包
胖包:包含依赖(很大,加载较慢,安全)
瘦包:不包含依赖(较小,加载快,但有可能会出错),使用胖包

window上运行胖jar包

java -jar HudiTest-1.0-SNAPSHOT-jar-with-dependencies.jar

image.png

8 将打包好的jar包上传到centos上

image.png
进入spark master节点上,进入spark安装目录,然后使用命令:

./bin/spark-submit \
--class org.example.wordCount \
--master spark://node1:7077 \
/root/svolt/data/test/HudiTest-1.0-SNAPSHOT-jar-with-dependencies.jar
  • 其中org.example.wordCount是主类,查看位置同上

image.png
image.png