以WordCount为例介绍scala开发流程(spark + scala)

1、整体流程(这里不是wordcount例子,但整体流程相同)

 

2、对整体流程有整体了解后,接下来使用Maven创建scala工程,也可以使用sbt,具体区别请参考博文:https://blog.csdn.net/TXBSW/article/details/84070499,如果之前没有配置Maven请参考博文:https://blog.csdn.net/qq_32588349/article/details/51461182https://blog.csdn.net/little_skeleton/article/details/80900244

右侧勾选Create from archetype,点击下面的scala-archetype-simple选项,点击Next。如下图

填写GroupId和ArtifactId选项,然后点击Next。如下图

选择本地安装的maven目录和maven配置文件的路径,点击Next,如下图

最后,填写Project name,和刚刚GroupId一样就可以,然后点击Finish,完成工程创建。

3、工程创建成功后,接下来在pom.xml文件中加入spark环境所需要的一些依赖包,如下所示。这里要注意spark的版本一定要和scala的版本相对应,如果缺少什么包,在该文件下自行添加即可。

<properties>
    <maven.compiler.source>1.5</maven.compiler.source>
    <maven.compiler.target>1.5</maven.compiler.target>
    <encoding>UTF-8</encoding>
    <scala.version>2.12.7</scala.version>
    <spark.version>2.2.1</spark.version>
    <hadoop.version>2.7.3</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>
-->
<dependencies>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
    </dependency>

    <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-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.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>${hadoop.version}</version>
    </dependency>

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

</dependencies

4、一切准备就绪,接下来进行程序的开发(以wordcount为例),当然在进行scala开发时,如果右键找不到scala.class,那么请进行如下设置。

package com.ivan

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

object WordCount {
  def main(args: Array[String]): Unit = {
    //创建SparkConf()并且设置App的名称
    val conf = new SparkConf().setAppName("wordcount").setMaster("local")

    //sc是SparkContext,他是spark程序执行的入口
    val sc = new SparkContext(conf)

    /**
      * 带参数的任务,通过args(0)和args(1)进行参数设置
      */
    //sc.textFile(args(0)).flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile(args(1))

    /**
      * 直接进行处理
      */
    val lines = sc.textFile("hdfs://10.77.20.23:8020/user/hadoop/word.txt")
    // lines.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)


    /**
      * 第二种处理写法
      */
    val words = lines.flatMap(line => {
      line.split(" ")
    })
    val pairWords = words.map(word => {
      new Tuple2(word, 1)
    })
    /**
      *
      * reduceByKey 先分组,在给每个组的value进行聚合
      */
    val result = pairWords.reduceByKey((v1, v2) => {
      v1 + v2
    })
    result.foreach(tuple => {
      println(tuple)
    })

    //停止sc,结束该任务
    sc.stop()
  }
}

 5、将程序打成jar包(过程如下,Maven方式),并利用winscp上传至服务器

6、向集群提交任务,并执行任务

./spark2-submit 
    --master spark://10.77.20.23:7077
    --executor-memory 512mb 
    --total-executor-cores 4 
    --class com.ivan.WordCount /program/spark-1.0.jar 
    hdfs://10.77.20.23:9000/user/hadoop/ 
    hdfs://10.77.20.23:9000/user/hadoop/output

 

posted @ 2019-01-18 17:23  小呆蝎子  阅读(687)  评论(0编辑  收藏  举报