java

单节点IDEA本地开发-SparkLocal运行

这篇文章想总结下我在idea开发spark程序所经历的步骤和犯过的错。

自学很难,但我相信春暖一定会花开。

  • 本地IDEA配置,编写WordCount程序,打jar包。
  • 将jar包上传至linux下
  • 先调试好linux下的spark本地模式,虽然yarn模式是以后运行的最多的,但是本地模式掌握了,再去学yarn就会容易理解。
  • sparkLocal跑程序。

WordCount是入门spark的经典步骤,所以本篇博客我们就以WordCount为案例去执行一遍流程。

一.本地IDEA配置,编写WordCount程序,打jar包。

1.首先你的Windows下需要有IDEA软件,我是去官网下的最新版本,然后pojie的,虽然我支持大家不要白嫖,但是臣妾做不到哇!

安装好了以后,我们开始配置IDEA的Maven环境和Scala环境。

我安装的maven是3.3.9版本的,下载哪个版本大同小异,但是你一定要记住你下载的版本号和解压缩后的路径。这是下载链接:https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/

我解压缩放在了F:\maven\apache-maven-3.3.9下面。

然后在此目录下创建repository文件夹,如下图所示。

在conf目录下有一个seetings文件,默认是国外网站,那样下载速度不仅慢还经常失败,我们更改内部镜像源为阿里云。使用NotePad++可以打开settings文件,复制如下代码替换到指定位置。

<!-- mirrors
   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
   |
   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
   | However, this repository may have problems with heavy traffic at times, so people have mirrored
   | it to several places.
   |
   | That repository definition will have a unique id, so we can create a mirror reference for that
   | repository, to be used as an alternate download site. The mirror site will be the preferred
   | server for that repository.
   |-->
  <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
      
      
     <mirror>     
  <id>nexus-aliyun</id>   
  <name>nexus-aliyun</name> 
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>   
  <mirrorOf>central</mirrorOf>     
</mirror>
  </mirrors>

2.打开IDEA软件。

File->Settings->Build,Execution,Deployment->Maven

配置我们自己的Maven环境,需要配置两项。Maven home directory和User settings file。如图所示

配置完了先点右下角的Apply,再点OK。

3.安装Scala插件:

file->settings->pulgins 这里找到插件安装的位置。搜索Scala,然后下载即可,默认下载的是最新版本。安装完如图所示。

安装完了先点右下角的Apply,再点OK。

4.新建Maven项目:

File->New->Project

左侧选择Maven,然后确认上方JDK为1.8,直接点击Next.(这里默认的是IDEA自带的Maven,稍后我们创建完项目再更改为我们自己的Maven目录)

这些名字随便填,填完点击Finish。

新建完的界面长这个亚子。

按照之前配置Maven的路径找到Maven,配置倒数第二项,配置完如图:

在pom.xml里加入以下代码,插入到project标签里:

<dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.1</version>
        </dependency>


    </dependencies>
    <build>
        <finalName>WordCount</finalName>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>WordCount</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

大家要仔细看清楚对印的版本号哦,你们的可能跟我的不一样。

肯定有人会标红出错,这时打开右边的Maven图标,看到有个刷新标志,点它。然后你就会开始下载一堆配置文件,还好我们提前配置了阿里云镜像,不然会慢到怀疑人生。

我这里在之前下载好了,所以配置都没问题。我的标红错误是这样解决的,希望对你们有帮助。

5.写WordCount程序

在main目录下新建Directory,名为scala。然后右键Scala,选择make directory as->source root。这样就会发现scala目录变蓝了。我们就可以在scala目录下新建scala文件了。

如果pom文件配置没问题,那么鼠标右键点击scala目录,就会出现新建scala class。我们选择scala class,自己取名字即可,然后选择object而不是class,回车创建。如图:

在项目下创建文件夹名为in,里面创建两个文件word.txt。文件里写:

Hello Scala
Hello Spark
Sqoop Java

在WordCount.scala里添加如下代码:

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

object test1{//方法名可以不和文件名相同

  def main(args: Array[String]): Unit = {

    val config: SparkConf = new SparkConf().setMaster("local[1]").setAppName("wordcount")
    config.set("spark.testing.memory", "2147480000")//后面的值大于512m即可
    val sc = new SparkContext(config)
    //println(sc)
    val lines: RDD[String] = sc.textFile("in")
    val words: RDD[String] = lines.flatMap(_.split(" "))
    val wordToOne: RDD[(String, Int)] = words.map((_,1))
    println(wordToOne)
    val wordToSum: RDD[(String, Int)] = wordToOne.reduceByKey(_+_)
    println(wordToSum)
    val result: Array[(String, Int)] = wordToSum.collect()
    println(result)
    result.foreach(println)

  }
}

然后运行WordCount.scala程序,出现以下结果即为正确。

如果出现了说缺少winutils.exe,那么上github搜索下载对应的bin目录下的插件。

6.将程序打jar包:

在spark目录下创建一个文件夹名为in,in下面创建一个或者多个txt,里面写上几个单词,像刚才一样。

打包前我们需要改下代码,在此代码里我们的输入路径是in,但是一般我们都会写绝对路径。所以将 val lines: RDD[String] = sc.textFile(“in”) 改为

val lines: RDD[String] = sc.textFile("file:///opt/modules/spark-2.2.0-bin/in")

现在可以打包啦。

右边选择Maven->Lifecycle->双击package.

第一次打jar包会下载很多东西,但是配了阿里云镜像的我们不在怕的。大约几分钟就 下载完成。jar包存在于target目录下,会打出来两个jar包,我们选择有依赖的jar包。

像我这样就是成功,撒花撒花。

通过类似filezilla软件将带有依赖的jar包上传到spark目录下。

二.调试linux下的spark本地模式

这里我们先配置local模式的spark,很好配,解压spark文件就能用了。

这里大家去百度搜一下教程就一定能配成功。

调试好以后进入spark目录,输入以下代码。

这段代码中WordCount是是方法名,WordCount-jar-with-dependencies.jar是带依赖的jar包。大家根据自己的文件名写上后就可以运行了。

bin/spark-submit \
--class WordCount \
WordCount-jar-with-dependencies.jar 

运行结果如下即为成功:

对于我这个小菜鸟来说,运行出来真的开心极了,但是以后的路还很长,希望我会一直开心下去,你也是哦~!

单节点IDEA本地开发-SparkLocal运行已关闭评论