本節(jié)介紹如何在IDEA上使用SparkStreaming開發(fā)一個NetworkWordCount程序萎馅。
1.下載Spark安裝目錄下的所有Jar包
使用WinSCP工具將$SPARK_HOME/jars目錄下的所有Jar包下載到本地目錄如E:/sparklib中。
2.使用IDEA搭建Spark程序開發(fā)環(huán)境
- 打開IDEA開發(fā)工具悦昵,選擇“Create New Project”歧斟,選擇Scala下面的sbt工程纯丸,Next
- 工程名字:NetworkWordCount,選擇一個保存位置静袖,比如:E:/NetworkWordCount觉鼻,Java版本和Scala版本需要和Spark集群環(huán)境中的保持一致,sbt版本保持默認(rèn)队橙,F(xiàn)inish
- 在NetworkWordCount工程上右鍵單擊坠陈,New,Directory捐康,輸入目錄名:sparkjars仇矾,OK
- 將剛才下載好的所有Jar包,復(fù)制粘貼到sparkjars文件夾解总,在彈出的確認(rèn)對話框中單擊OK
- 選中sparkjars目錄下的所有的Jar包贮匕,右鍵,選中“Add as Libirary”花枫,在彈出的對話框中輸入庫的名字刻盐,比如:sparkjars,OK
注意:IDEA構(gòu)建工程的過程比較慢劳翰,請耐心等待敦锌。只有等工程構(gòu)建完成后,工程的結(jié)構(gòu)才會完整佳簸,寫代碼時才會有智能提示乙墙。可以通過更改sbt源的方式來提高構(gòu)建速度生均,這里不作介紹听想。
3.編寫NetworkWordCount程序
- 在NetworkWordCount工程下的src/main/scala目錄上右鍵,New疯特,Package:SparkStreaming哗魂,OK
- 在SparkStreaming下面New,Scala Class:NetworkWordCount.scala漓雅,種類選擇:Object录别,OK
- 編寫NetworkWordCount.scala代碼如下:
package SparkStreaming
import org.apache.spark.SparkConf
import org.apache.spark.storage.StorageLevel
import org.apache.spark.streaming.{Seconds, StreamingContext}
object NetworkWordCount{
def main(args:Array[String]) {
//配置:程序名字為NetworkWordCount朽色,運(yùn)行模式為本地,開啟2個線程
val sparkconf = new SparkConf().setAppName("NetworkWordCount").setMaster("local[2]")
//創(chuàng)建StreamingContext對象组题,設(shè)置批處理時間間隔為3秒
val ssc = new StreamingContext(sparkconf, Seconds(3))
//創(chuàng)建DStream對象葫男,連接到Netcat服務(wù)器
val lines = ssc.socketTextStream("192.168.126.110",9999,StorageLevel.MEMORY_AND_DISK_SER)
//處理采集到的數(shù)據(jù)
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(x=>(x,1)).reduceByKey(_+_)
//輸出結(jié)果
wordCounts.print()
//啟動StreamingContext對象,開始采集處理數(shù)據(jù)
ssc.start()
//等待計算結(jié)束
ssc.awaitTermination()
}
}
3.運(yùn)行結(jié)果
3.1先將程序運(yùn)行起來
按Ctrl + Shift + F10或者在代碼上右鍵崔列,選擇Run “NetworkWordCount”將程序運(yùn)行起來梢褐。
3.2啟動netcat服務(wù)器并開始發(fā)送數(shù)據(jù)
將192.168.126.110上面的netcat服務(wù)器啟動起來,并開始發(fā)送數(shù)據(jù):
3.3查看程序的計算結(jié)果
在程序的輸出窗口就會輸出接收到的數(shù)據(jù)的計算結(jié)果:
可以看到程序成功接收到了NetCat服務(wù)器發(fā)送的數(shù)據(jù)并正確統(tǒng)計出了每個時間窗口內(nèi)的單詞頻率赵讯。這個例子只能統(tǒng)計單個時間窗口內(nèi)的數(shù)據(jù)盈咳,沒有記錄之前的狀態(tài),不能統(tǒng)計所有單詞的頻率边翼。后面章節(jié)我們會繼續(xù)介紹Spark Streaming全局的WordCount程序鱼响。祝你玩得愉快!