如何在IDEA中编写Spark的WordCount程序

1:spark shell仅在测试和验证我们的程序时使用的较多,在生产环境中,通常会在IDE中编制程序,然后打成jar包,然后提交到集群,最常用的是创建一个Maven项目,利用Maven来管理jar包的依赖。

如何在IDEA中编写Spark的WordCount程序_第1张图片

2:配置Maven的pom.xml:



4.0.0

com.luoliang.spark
luoliang
1.0-SNAPSHOT


    2.1.1
    2.11.8



    
        org.apache.spark
        spark-core_2.11
        ${spark.version}
    






    
         org.scala-tools
            maven-scala-plugin
            2.15.2
            
                
                    
                        compile
                        testCompile
                    
                
            
        


        
            maven-compiler-plugin
            3.6.0
            
                1.8
                1.8
            
        

        
            org.apache.maven.plugins
            maven-surefire-plugin
            2.19
            
                true
            
        
    



注意:配置好pom.xml以后,点击Enable Auto-Import即可;

3:本地运行——新建一个scala class,类型为Object,然后编写spark程序,如下所示:

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

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

val conf = new SparkConf().setMaster("local")setAppName("WordCount")

val sc = new SparkContext(conf)

val file=sc.textFile("file:///D:/a/a.txt").flatMap(_.split(" ")).map((_,1))
  .reduceByKey(_+_).saveAsTextFile("file:///D:/a/out/7")
  }

}

这段代码实现的是在本地文件夹中获取数据然后输出到本地文件夹中的WordCount操作

4:集群/本地运行——新建一个scala class,类型为Object,然后编写spark程序,如下所示:

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

object Spark1 {

  def main(args: Array[String]): Unit = {
val conf = new SparkConf()
  .setAppName("wordcount")
  .setMaster("local")

val sc = new SparkContext(conf)
val textFile = sc.textFile("hdfs://master:9000/kk/a.txt")
val wordsRDD = textFile.flatMap(_.split(" "))
val wordCountRDD = wordsRDD.map((_, 1)).reduceByKey(_+_).saveAsTextFile("file:///D:/a/out/1")

sc.stop
  }
}

这段代码实现的是在hadoop集群中获取数据然后输出到本地文件夹中的WordCount操作,进行操作之前记得提前开启hadoop集群和spark集群

5:集群运行——新建一个scala class,类型为Object,然后编写spark程序,如下所示:

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

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

val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")

val sc = new SparkContext(conf)

val file=sc.textFile("hdfs://master:9000/kk/a.txt").flatMap(_.split(" ")).map((_,1))
  .reduceByKey(_+_).saveAsTextFile("hdfs://master:9000/out")
sc.stop()
  }
}

这段代码实现的是在hadoop集群中获取数据然后输出到hadoop集群文件夹中的WordCount操作,进行操作之前记得提前开启hadoop集群和spark集群

6:打成jar包运送到集群运行——新建一个scala class,类型为Object,然后编写spark程序,如下所示:

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

object WordCount {

  def main(args: Array[String]): Unit = {
//创建SparkConf()并且设置App的名称
val conf = new SparkConf().setAppName("wordCount");
//创建SparkContext,该对象是提交spark app的入口
val sc = new SparkContext(conf);
//使用sc创建rdd,并且执行相应的transformation和action
sc.textFile(args(0)).flatMap(_.split(" ")).map((_ ,1)).reduceByKey(_ + _,1).sortBy(_._2,false).saveAsTextFile(args(1));
//停止sc,结束该任务
sc.stop();
  }
}

这段代码实现的是写好wordcount逻辑流程,将其打成jar包进入虚拟机中,开启hadoop集群和spark集群后在spark集群中进行操作,以下是操作的具体流程。

7:使用Maven打包:首先修改pom.xml中的mainClass,使其和自己的类路径对应起来:

如何在IDEA中编写Spark的WordCount程序_第2张图片
然后,点击idea右侧的Maven Project选项,点击Lifecycle,选择clean和package,然后点击Run Maven Build:
如何在IDEA中编写Spark的WordCount程序_第3张图片
等待编译完成,选择编译成功的jar包,并将该jar上传到Spark集群中的某个节点上:
如何在IDEA中编写Spark的WordCount程序_第4张图片
记得,启动你的hdfs和Spark集群,然后使用spark-submit命令提交Spark应用(注意参数的顺序):
然后开始进行Spark Submit提交操作,命令如下所示:

bin/spark-submit --class com.bie.WordCount --master spark://master:7077 --executor-memory 512M --total-executor-cores 2 /home/hadoop/data_hadoop/sparkWordCount-1.0-SNAPSHOT.jar hdfs://master:9000/wordcount.txt hdfs://master:9000/output

操作如下:
如何在IDEA中编写Spark的WordCount程序_第5张图片
可以在图形化页面看到多了一个Application:
如何在IDEA中编写Spark的WordCount程序_第6张图片
然后呢,就出错了,学知识,不出点错,感觉都不正常:

解决思路,百度了一下,也没缕出思路,就只知道是连接超时了,超过了120s,然后呢,我感觉是自己内存设置小了,因为开的虚拟机,主机8G,三台虚拟机,每台分了1G内存,然后设置Spark可以占用800M,跑程序的时候,第一次设置为512M,就连接超时了,第二次设置为了700M,顺利跑完。

最后查看执行结果即可
如何在IDEA中编写Spark的WordCount程序_第7张图片

你可能感兴趣的:(Scala,大数据)