Eclipse+scala-plugin开发第一个spark程序WordCount并部署运行

     在Eclipse中用scala语言写spark程序,需要安装scala,还需要在Eclipse中安装scala插件,便于新建scala project,scala object等,spark程序写完了还需要打包,普通的工程无法通过export方式打包,需要新建maven project.这里还需要让eclipse支持scala的maven工程。工程建立了就剩下编码和打包,打包需要借助maven-assembly-plugin。

    这里介绍如何一步一步编写一个spark程序。

1、安装scala插件,这里不做过多的说明。

Help->Install New Software,拷贝http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/site到Work with输入框中,一步一步安装。


2、安装maven-for-scala,让eclipse能够新建scala的maven工程。

同第一步安装插件一样,拷贝 http://alchim31.free.fr/m2e-scala/update-site/这个url到Work with输入框中,安装。


3、构建一个scala的maven工程

如果maven工程类型中没有scala-archetype-simple的项目,就在Window->Preferences->Maven->Archetypes增加一个Remote Catalog。

url:http://repo.maven.apache.org/maven2/archetype-catalog.xml

description:Remote Catalog


4、编辑pom.xml文件,这里是重点,spark依赖的jar包,然后就是最后构建时需要的插件。

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

  <repositories>
    <repository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </repository>
  </repositories>

  <pluginRepositories> 
    <pluginRepository>
      <id>scala-tools.org</id>
      <name>Scala-Tools Maven2 Repository</name>
      <url>http://scala-tools.org/repo-releases</url>
    </pluginRepository>
  </pluginRepositories>
这里指定scala的版本2.11.8,spark版本是2.1.0(spark2.1.0需要的scala是2.11+版本,所以这里选择scala2.11.8),hadoop版本是2.6.0。

按照官网的要求,编码spark需要引入spark-core,hadoop-client两个依赖,以及他们本身的依赖。

    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>
    <dependency>
      <groupId>org.specs</groupId>
      <artifactId>specs</artifactId>
      <version>1.2.5</version>
      <scope>test</scope>
    </dependency>
    <dependency>
       <groupId>org.apache.spark</groupId>
       <artifactId>spark-core_2.11</artifactId>
       <version>${spark.version}</version>
    </dependency>
    <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-client</artifactId>
       <version>${hadoop.version}</version>
    </dependency>
这样编码不会出现编译问题。
重点的构建jar包插件在这里。
<build>
    <sourceDirectory>src/main/scala</sourceDirectory>
    <testSourceDirectory>src/test/scala</testSourceDirectory>
    <plugins>
       <plugin>
         <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>testCompile</goal>
            </goals>
            <configuration>
              <args>
                <arg>-make:transitive</arg>
                <arg>-dependencyfile</arg>
                <arg>${project.build.directory}/.scala_dependencies</arg>
              </args>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.18.1</version>
        <configuration>
          <useFile>false</useFile>
          <disableXmlReport>true</disableXmlReport>
          <!-- If you have classpath issue like NoDefClassError,... -->
          <!-- useManifestOnlyJar>false</useManifestOnlyJar -->
          <includes>
            <include>**/*Test.*</include>
            <include>**/*Suite.*</include>
          </includes>
        </configuration>
      </plugin>
		<plugin>
			<artifactId>maven-assembly-plugin</artifactId>
			<version>2.6</version>
			<configuration>
			<descriptorRefs>
			<descriptorRef>jar-with-dependencies</descriptorRef>
			</descriptorRefs>
			</configuration>
		</plugin>
    </plugins>
  </build>
构建打包就需要最后的maven-assembly-plugin,这里可以将写得代码和依赖包都打入jar包,也可以生成一个只带代码的jar包。

5、编码WordCount.scala

package com.xxx.spark2
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf

object WordCount {
  def main(args: Array[String]): Unit = {
      val inputFile = "/root/helloSpark.txt"
      val conf = new SparkConf().setAppName("wordcount").setMaster("local[2]")
      val sc = new SparkContext(conf)
      val textFile = sc.textFile(inputFile)
      val wordcount = textFile.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey((a,b)=>(a+b))
      wordcount.foreach(println)     
  }
}
代码大致意思:1、设置spark配置,给程序取名,并设置master为本地模式。

                        2、根据spark配置构建spark上下文环境。

                        3、读取一个指定文件。

                        4、将文件按空格分割,map阶段将每一个单词记录1次键值对为(word,1),reduce阶段将同一个单词累加,计算单词频率。

                        5、循环打印词频统计结果。

6、构建打包,选中项目,右键,Run As ->Maven build,在弹出的编译选项框中的Goals中写上:assembly:assembly,然后点击Run。等待构建完成。


构建成功:


成功之后生成的jar包在target目录下:


7、部署运行,这里就是向运行着的spark集群中提交作业,让spark来运行我们的程序,统计词频。

部署需要先启动master,再启动worker,最后才是提交作业。

准备文本:


启动master

./sbin/start-master.sh 

启动worker

./bin/spark-class org.apache.spark.deploy.worker.Worker spark://server:7077

执行以上语句截图:


提交任务:

./bin/spark-submit --master spark://server:7077 --class "com.xxx.spark2.WordCount" /home/ApacheHadoop/spark-2.1.0/spark2-0.0.1-SNAPSHOT.jar

运行结果如图:


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

luffy5459

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

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

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

打赏作者

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

抵扣说明:

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

余额充值