Eclipse创建Spark的WordCount工程

来源:互联网 发布:莎士比亚别生气 知乎 编辑:程序博客网 时间:2024/06/03 20:07

环境:Linux16.0.4,Spark-2.1.0,


准备工作:

先在用户主目录下面创建一个test.txt文件,文件内容为:

Apple Apple Orange
Banana Grape Grape

然后:

(1)先创建一个scala工程,工程名为sparkwordcount,并新建一个scala object的.scala格式文件,文件名为wordcount。


(2)在工程下面新建一个libs文件下,将spark-2.1.0安装目录下面的jars文件夹下面的所有jar包拷贝到libs文件夹下面。


(3)选中libs文件夹下面的所有jar包,执行右键Build Path->Configure Build Path...


(4)添加以下代码到工程的wordcount.scala源文件中。


import org.apache.log4j.Loggerimport org.apache.log4j.Levelimport org.apache.spark.SparkContextimport org.apache.spark.SparkConfimport scala.util.Tryimport scala.util.control.Exception.Catchobject wordcount {  def main(args:Array[String]):Unit=  {    Logger.getLogger("org").setLevel(Level.OFF)    System.setProperty("spark.ui.showConsoleProgress", "false");    println("开始运行wordcount")    val sc=new SparkContext(new SparkConf().setAppName("wordcount").setMaster("local[1]"))    println("开始读取文本文件...")    val textFile=sc.textFile("file:/home/zhang/test.txt")    println("开始创建RDD...")    val countsRDD=textFile.flatMap(f=>f.split(" ")).map(word=>(word,1))    .reduceByKey(_+_)    println("开始保存到文本文件...")    try{      countsRDD.saveAsTextFile("file:/home/zhang/output")      println("已经存盘成功")    }    catch {      case t: Exception => println("输出目录已经存在,请先删除原目录") // TODO: handle error    }  }}

(5)在Eclipse工具栏点击Run->Run Configurations..

在New Configurations设置界面中,按照下图的所示填入Name,Project,MainClass



然后点击应用,再点击Run。点击Run过后,有可能会报如下错误信息:

开始运行wordcountUsing Spark's default log4j profile: org/apache/spark/log4j-defaults.propertiesException in thread "main" java.lang.IllegalArgumentException: System memory 253427712 must be at least 471859200. Please increase heap size using the --driver-memory option or spark.driver.memory in Spark configuration.at org.apache.spark.memory.UnifiedMemoryManager$.getMaxMemory(UnifiedMemoryManager.scala:216)at org.apache.spark.memory.UnifiedMemoryManager$.apply(UnifiedMemoryManager.scala:198)at org.apache.spark.SparkEnv$.create(SparkEnv.scala:330)at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:174)at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:257)at org.apache.spark.SparkContext.<init>(SparkContext.scala:432)at wordcount$.main(wordcount.scala:15)at wordcount.main(wordcount.scala)


看到这个错误信息不必管它。

(6)将sparkwordcount工程导出到Jar文件包

点击Eclipse工具栏的File->Export...->Java->Jar File,然后点击Next。


导出到用户主目录,文件名为wordcount.jar

(7)如果在主目录下面有output文件夹则需要先删除文件夹

(8)输入命令:spark-submit --driver-memory 2g --master local[1] --class wordcount wordcount.jar,则可以看到如下显示:


表面命令已经执行完成,执行结果保存在output目录下面。

(7)cd到output文件下面,查看输出结果

zhang@Desktop1:~$ cd output/
zhang@Desktop1:~/output$ ls
part-00000  _SUCCESS
zhang@Desktop1:~/output$ cat part-00000 
(Grape,2)
(Orange,1)
(Apple,2)
(Banana,1)
zhang@Desktop1:~/output$ 


如果是要在hadoop YARN上运行spark的wordcount。则需要先启动hadoop集群,

执行start-all.sh启动集群。然后执行

zhang@Desktop1:~$ spark-submit --driver-memory 2g --class wordcount  --master yarn-client wordcount.jar

则输出以下信息:


Warning: Master yarn-client is deprecated since 2.0. Please use master "yarn" with specified deploy mode instead.
开始运行wordcount
开始读取文本文件...
开始创建RDD...
开始保存到文本文件...
已经存盘成功
zhang@Desktop1:~$