Spark WordCount 两种运行方式

用Scala编写WordCount程序,在IDEA中可以通过(1)新建maven项目,在pom文件中引入Spark,Scala,Hadoop相关的依赖包来开发;(2)新建普通的Scala项目,然后将相关的jar包导入到项目中,同样可以来开发。

一般来说,采用maven的方式来进行开发会比较方便,Spark WordCount的pom文件如下:


  4.0.0
  com.whua
  word-count
  1.0-SNAPSHOT
  2008
  
      UTF-8
      2.3.0
      2.11.0
      2.7.0
  

  
    
      scala-tools.org
      Scala-Tools Maven2 Repository
      http://scala-tools.org/repo-releases
    
  

  
    
      scala-tools.org
      Scala-Tools Maven2 Repository
      http://scala-tools.org/repo-releases
    
  

    
      
          org.scala-lang
          scala-library
          ${scala.version}
      
      
          org.apache.spark
          spark-core_2.11
          2.3.0
      
      
        org.apache.hadoop
        hadoop-client
        ${hadoop.version}
      
    

  
    src/main/scala
    src/test/scala
    
      
        org.scala-tools
        maven-scala-plugin
        
          
            
              compile
              testCompile
            
          
        
        
          ${scala.version}
          
            -target:jvm-1.5
          
        
      
      
        org.apache.maven.plugins
        maven-eclipse-plugin
        
          true
          
            ch.epfl.lamp.sdt.core.scalabuilder
          
          
            ch.epfl.lamp.sdt.core.scalanature
          
          
            org.eclipse.jdt.launching.JRE_CONTAINER
            ch.epfl.lamp.sdt.launching.SCALA_CONTAINER
          
        
      
    
  
  
    
      
        org.scala-tools
        maven-scala-plugin
        
          ${scala.version}
        
      
    
  

Spark WordCount 的源码如下:

package com.whua

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

/**
  * @author: whua 
  * @create: 2018/10/09 19:37
  */
object SparkWC {
  def main(args: Array[String]): Unit = {
    //设置Spark配置
    val conf: SparkConf = new SparkConf().setAppName("SparkWC") //.setMaster("local[*]")
    //创建Spark上下文
    val sc: SparkContext = new SparkContext(conf)
    //读取输入数据
    val lines = sc.textFile(args(0))
    //处理数据
    val words: RDD[String] = lines.flatMap(_.split(" "))
    val pair: RDD[(String, Int)] = words.map((_, 1))
    val reduced: RDD[(String, Int)] = pair.reduceByKey(_ + _)
    val ans = reduced.sortBy(_._2, false)

    ans.saveAsTextFile(args(1))
    //    println(ans.collect().toBuffer)

    //关闭
    sc.stop()
  }
}

在IDEA中执行需要编辑运行配置,这里主要是给一个输入文件的路径,为hdfs上的/input路径。

Spark WordCount 两种运行方式_第1张图片

在hdfs上的/input路径中要保证有输入数据:

Spark WordCount 两种运行方式_第2张图片

运行方式

1、在IDEA中运行

直接在IDEA中运行程序,可以看到程序运行成功:

Spark WordCount 两种运行方式_第3张图片

2、打成jar包,上传到集群上运行

点击Maven projects,然后双击package,IDEA自动开始打包,过程结束之后,会生成一个target目录,其中会生成一个jar包,然后将jar包上传在集群上。

Spark WordCount 两种运行方式_第4张图片

在Spark master上,进入到$SPARK_HOME/bin目录下面,里面有一个spark-submit的脚本,我们将使用这个脚本来进行任务提交。提交任务的命令如下:

 ./spark-submit --class com.whua.SparkWC --master spark://master:7077 --executor-memory 1g --total-executor-cores 2 /home/whua/Documents/word-count-1.0-SNAPSHOT.jar hdfs://master:9000/input hdfs://master:9000/output

命令中的参数分别为:运行的类名(com.whua.SparkWC),运行任务的集群的master(--master spark://master:7077)(一个机器上可以有多个集群的进程),每个机器的内存(--executor-memory 1g ),运行改任务总共的最大核数(--total-executor-cores 2),jar包的路径(/home/whua/Documents/word-count-1.0-SNAPSHOT.jar),输入数据的路径和输出数据的路径。参考链接

作业开始运行,运行完成之后如下图,可以看到,和我们在命令中配置的参数相同。

Spark WordCount 两种运行方式_第5张图片

同时,在hdfs上可以看到输出的数据,因为有三个节点,所以输出的结果分成了三个part。

Spark WordCount 两种运行方式_第6张图片

Spark WordCount 两种运行方式_第7张图片

至此,Spark WordCount程序及其两种运行方式介绍完毕。

你可能感兴趣的:(Spark)