spark开发环境搭建(基于idea 和maven)

使用idea构建maven 管理的spark项目 ,默认已经装好了idea 和Scala,mac安装Scala

那么使用idea 新建maven 管理的spark 项目有以下几步:

1、 scala插件的安装

2、全局JDK和Library的设置

3、配置全局的Scala SDK

4、新建maven项目

5、 属于你的”Hello World!”

6、导入spark依赖

7、编写sprak代码

8、打包在spark上运行

1.scala插件的安装

首先在欢迎界面点击Configure,选择plugins如下图所示:

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

因为的安装过了所以事uninstall 没有安装的话是 install ,安装成功后,点击OK退出,然后重启Intellij IDEA。

重启后,选择 Configure 中的 Setting 选项,进入Intellij IDEA的设置页面去修改IDE的Encoding,我们要将 IDE Encoding 和 Project Encoding 以及最下方 的 Default Encoding for properties files 的属性都修改为 UTF-8 ,注意 :如果不设置这里,程序将不能运行。然后点击右下方的 Apply 按钮和 OK 按钮,关闭设置页面。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

2.全局JDK和Library的设置

为了不用每次都去配置JDK,这里先进行一次全局配置。首先在欢迎界面点击Configure,然后在Project Defaults的下拉菜单中选择Project Structure,如下图所示:

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

在打开的Default Project Structure界面的左侧边栏选择Project,在右侧打开的页面中创建一个新的JDK选项(一定要本机已经安装过JDK了),如下图所示步骤在下拉菜单中点击JDK后,在打开的对话框中选择你所安装JDK的位置,注意是JDK安装的根目录,就是JAVA_HOME中设置的目录。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

3.配置全局的Scala SDK

在欢迎页面的右下角点击Configure,然后在Project Defaults的下拉菜单中选择Project Structure,在打开的页面左侧选择Global Libraries,然后在中间一栏中有一个绿色的加号标志 +,点击后在下拉菜单中选择 Scala SDK

然后在打开的对话框中选择系统本身所安装的Scala(即System对应的版本),点击OK确定,这时候会在中间一栏位置处出现Scala的SDK,在其上右键点击后选择Copy to Project Libraries…,这个操作是为了将Scala SDK添加到项目的默认Library中去。整个流程如下面的动图所示。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

注意1:(同上,此处是在无上一步骤时使用)如果是第一次利用maven构建scala开发spark环境的话,这里面的会有一个选择scala SDK和Module SDK的步骤,这里路径选择你安装scala时候的路径和jdk的路径就可以了。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

注意2:填写GroupId和ArtifactId这里我就随便写了个名字,如下图,点Next。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

注意3:第三步很重要,首先是你的Intellij IDEA里有Maven,一般的新版本都会自带maven,而且maven的目录在IDEA安装路径下plugins下就能找到,然后再Maven home directory地址中填写maven相对应的路径,本文中的IDEA版本比较老,是自己下的Maven安装上的(不会的可以百度下,很简单,建议使用新的IDEA,不需要自己下载maven)。然后这里面的User settings file是你maven路径下conf里面的settings.xml文件,勾选上override即可,这里面的Local repository路径可以不用修改,默认就好,你也可以新建一个目录。点击Next。

注意:截图的时候忘了,把Local repository前面的override也勾选上,不然构建完会报错,至少我的是这样。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

注意4:填写自己的项目名,随意即可。点击finish。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

4.新建maven项目

在欢迎界面点击Create New Project,在打开的页面左侧边栏中,选择Maven,然后在右侧的Project SDK一项中,查看是否是正确的JDK配置项正常来说这一栏会自动填充的,因为我们之前在1.3中已经配置过了全局的Project JDK了,如果这里没有正常显示JDK的话,可以点击右侧的New…按钮,然后指定JDK安装路径的根目录即可),然后点击Next,来到Maven项目最重要三个参数的设置页面,这三个参数分别为:GroupId, ArtifactId和Version. 步骤如下图所示:

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

5.属于你的”Hello World!”

在上一步中,我们已经创建了一个Maven工程

1、为了让你的首次体验Scala更清爽一些,将一些暂时无关的文件和文件夹都勇敢的删除掉吧,主要有 main\java, main\resources 和 test 这三个;

2、将Scala的框架添加到这个项目中,方法是在左侧栏中的项目名称上右键菜单中点击Add Framework Support…,然后在打开的对话框左侧边栏中,勾选Scala前面的复选框,然后点击确定即可(前提是上文中所述步骤都已正确走通,否则你很有可能看不到Scala这个选项的);

3、 在main文件夹中建立一个名为 scala 的文件夹,并右键点击 scala 文件夹,选择 Make Directory as,然后选择Sources Root ,这里主要意思是将 scala 文件夹标记为一个源文件的根目录,然后在其内的所有代码中的 package ,其路径就从这个根目录下开始算起。

4、在已经标记好为源文件根目录的 scala 文件夹 上,右键选择 New,然后选择 Scala Class,随后设置好程序的名称,并且记得将其设置为一个 Object(类似于Java中含有静态成员的静态类),正常的话,将会打开这个 Object 代码界面,并且可以看到IntelliJ IDEA自动添加了一些最基本的信息;

在创建的 Object 中输入如下语句:

def main(args: Array[String]):Unit = {
println("Hello World!")
}

5.在程序界面的任意位置,右键单击后选择 Run '你的程序名称',静待程序的编译和运行,然后在下方自动打开的窗口中,你就可以看到振奋人心的 Hello World!了。

6. 导入spark依赖

此时你已经可以成功的运行一个Scala 项目了。想要运行在spark 上则还需要导入相关依赖。打开pom.xml文件添加如下依赖。

注意:是添加如下依赖;spark 和Scala的版本是对应的。

<?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>com.luoliang.spark</groupId>
    <artifactId>luoliang</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <spark.version>2.1.0</spark.version>
        <scala.version>2.11.8</scala.version>
    </properties>

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

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

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

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

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

    </dependencies>


    <build>
        <plugins>
            <plugin> <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

导入依赖以后记得点击import changes,引入jar 包。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

这里要注意下几个小问题:

注意5:这里面会有src/main/scala和src/test/scala需要你自己在对应项目目录下构建这两个文件夹路径,若不构建会报错。(不构建也可以)

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

7. 编写sprak代码

依赖添加成功后,新建scala 的包package,输入包名com.luoliang,然后在包下新建scala的object 文件然后填写如下代码

//本案例是新建一个int 型的List数组,对数组中的每个元素乘以3 ,再过滤出来数组中大于10 的元素,然后对数组求和。

package com.luoliang

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.ml.regression.{LinearRegression, LinearRegressionModel}
import org.apache.spark.ml.linalg.{Vector, Vectors}
import org.apache.spark.sql._
import org.apache.spark.sql.SparkSession

//命令行提交
//./bin/spark-submit --class MySpark --master spark://localhost:7077 /home/hadoop/anaconda2/MaSpark/out/artifacts/MaSpark_jar/MaSpark.jar
/**
  * Created by yangyibo on 16/11/21.
  */

object MySpark {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("mySpark") //setMaster("local") 本机的spark就用local,远端的就写ip //如果是打成jar包运行则需要去掉 setMaster("local")因为在参数中会指定。
      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")
  }
}

代码编写好以后,右键 run ‘mySpark’ 运行。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

执行结果如下:

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

8. 打包运行

运行成功后,可以讲代码打包成jar 包发送到远端或者本地的spark 集群上运行。打包有以下步骤

点击“File“然后选择“project Structure“

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

然后如图所示进行如下操作

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

在弹出的对话框中点击按钮,选择主类进行如下4步操作。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

由于我们的jar包实在spark 上运行的,所可以删除其他不需要的依赖包,如下图所示,删除其他不需要的包,只留下红色矩形中的两个。

注意:output directory 的路径。此处是你导出 jar 的路径。

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

执行 bulid 构建你的jar

《spark开发环境搭建(基于idea 和maven)》
《spark开发环境搭建(基于idea 和maven)》

jar 包导出以后就可以在spark上运行了。

此时进入终端,进入到spark安装包的 bin 目录下。执行如下命令

MySpark :是启动类的名字,如果有包命,要加包名,(例如 com.edu.MySpark)

spark1:7077 : 是你远端的spark 的地址 ,(可以是 //192.168.200.66:7077) 写spark1 是因为我在/etc/hosts 中配置了环境参数,本地则是localhost,至于hosts 怎么配,请自行百度。

/home/hadoop/anaconda2/MaSpark/out/artifacts/MaSpark_jar/MaSpark.jar: 是你jar 包的路径。

本地命令行提交命令:MySpark是你的主类。

./bin/spark-submit --class MySpark --master spark://localhost:7077 /home/hadoop/anaconda2/MaSpark/out/artifacts/MaSpark_jar/MaSpark.jar

    原文作者:南唐遗少
    原文地址: https://zhuanlan.zhihu.com/p/55450219
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞