环境: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.Logger
import org.apache.log4j.Level
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import scala.util.Try
import scala.util.control.Exception.Catch
object 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过后,有可能会报如下错误信息:
开始运行wordcount
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Exception 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:~$