運(yùn)行第一個(gè)SparkStreaming程序(及過(guò)程中問(wèn)題解決)

官方示例說(shuō)明

按照官方文檔的 這個(gè)示例說(shuō)明,可以輕松的在本地的spark-shell環(huán)境中測(cè)試這個(gè)示例泉粉。示例连霉,即為了更好的入門(mén),那么就再說(shuō)明一下嗡靡。
運(yùn)行這個(gè)統(tǒng)計(jì)單詞的方式有三種跺撼,前面兩種是官方文檔上的指引,第三種則是用scala程序運(yùn)行讨彼。


  • 第一種方式, run-demo

  1. 打開(kāi)一個(gè)終端歉井,打開(kāi)一個(gè)終端,輸入 命令 nc -lk 9999哈误,暫時(shí)叫做 “nc終端” 吧
  2. 再打開(kāi)終端哩至,切換到Spark HOME目錄, 執(zhí)行命令 bin/run-example org.apache.spark.examples.streaming.NetworkWordCount localhost 9999蜜自, 然后每秒會(huì)有類(lèi)似一下日志循環(huán)輸出

-------------------------------------------
Time: 1415701382000 ms
-------------------------------------------
-------------------------------------------
Time: 1415701383000 ms
-------------------------------------------

  1. 在nc終端隨便輸入一些字符串菩貌,用空格隔開(kāi),回車(chē)重荠,如aa aa bb c箭阶。可以在上面的Spark終端中看到有新內(nèi)容輸出

-------------------------------------------
Time: 1415701670000 ms
-------------------------------------------
(aa,2)
(bb,1)
(c,1)

OK戈鲁,成功仇参!


  • 第二種 spark-shell 模式

下面介紹在spark-shell中輸入scala代碼運(yùn)行的方式。

  1. 同上面第一步婆殿,打開(kāi)一個(gè)終端诈乒,打開(kāi)一個(gè)終端,輸入 命令 nc -lk 9999婆芦,暫時(shí)叫做 “nc終端” 吧
  2. 再打開(kāi)一個(gè)終端抓谴, 切換到Spark HOME目錄下暮蹂,輸入 bin/spark-shell (如果你已經(jīng)安裝好了Spark的話,直接輸入 spark-shell 即可)癌压,等待Spark啟動(dòng)成功仰泻,會(huì)打印信息

Spark context available as sc.
scala>

然后輸入以下語(yǔ)句:

import org.apache.spark.streaming._ 
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.api.java.function._
import org.apache.spark.streaming._
import org.apache.spark.streaming.api._
 
// Create a StreamingContext with a local master
val ssc = new StreamingContext(sc, Seconds(1))

// Create a DStream that will connect to serverIP:serverPort, like localhost:9999
val lines = ssc.socketTextStream("localhost", 9999)

// Split each line into words
val words = lines.flatMap(_.split(" "))
import org.apache.spark.streaming.StreamingContext._

// Count each word in each batch
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _)

// Print a few of the counts to the console
wordCounts.print()
ssc.start()             // Start the computation
ssc.awaitTermination()  // Wait for the computation to terminate

會(huì)打印以下信息:

14/11/11 18:07:23 INFO MemoryStore: ensureFreeSpace(2216) called with curMem=100936, maxMem=278019440
......
14/11/11 18:07:23 INFO DAGScheduler: Stage 91 (take at DStream.scala:608) finished in 0.004 s
14/11/11 18:07:23 INFO SparkContext: Job finished: take at DStream.scala:608, took 0.007531701 s
-------------------------------------------
Time: 1415700443000 ms
-------------------------------------------

  1. 同第一種方式的第3步,隨便輸入一些字符串滩届,用空格隔開(kāi)集侯,回車(chē),如aa aa bb c帜消√耐鳎可以在上面的Spark終端中看到有新內(nèi)容輸出

-------------------------------------------
Time: 1415701670000 ms
-------------------------------------------
(aa,2)
(bb,1)
(c,1)

OK,成功泡挺!

  • 第三種 scala-ide編程方式

在用這種方式運(yùn)行這個(gè)demo代碼的時(shí)候辈讶,遇到了不少問(wèn)題,記錄下來(lái)娄猫,供大家參考贱除。這個(gè)例子,請(qǐng)大家先根據(jù)這里記錄的方式進(jìn)行操作媳溺,得到一個(gè)可以運(yùn)行的程序月幌,后面我會(huì)記錄遇到的問(wèn)題。

  1. 下載scala-ide, 下載鏈接悬蔽,下載 For Scala 2.10.4 下的對(duì)應(yīng)平臺(tái)的ide扯躺,解壓,運(yùn)行蝎困。
  2. 安裝sbt录语,下載鏈接,
  3. 安裝sbteclipse, github地址, 編輯 ~/.sbt/0.13/plugins/plugins.sbt 文件, 添加以下內(nèi)容 addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.5.0")禾乘,如果沒(méi)有plugins目錄和plugins.sbt钦无,自行創(chuàng)建。
  4. 用向?qū)?chuàng)建一個(gè)scala項(xiàng)目盖袭,并在項(xiàng)目根目錄下創(chuàng)建一個(gè)build.sbt文件失暂,添加以下內(nèi)容(注意,每行正式語(yǔ)句之后要換行)

name := "spark-test"

version := "1.0"

scalaVersion := "2.10.4"

// set the main class for the main 'run' task
// change Compile to Test to set it for 'test:run'
mainClass in (Compile, run) := Some("test.SparkTest")

libraryDependencies += "org.apache.spark" % "spark-streaming_2.10" % "1.1.0"

  1. 創(chuàng)建test.SparkTest.scala文件鳄虱,添加以下代碼

package test
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.SparkContext
import org.apache.spark.api.java.function._
import org.apache.spark.streaming._
import org.apache.spark.streaming.api._

object SparkTest {
def main(args: Array[String]): Unit = {
// Create a StreamingContext with a local master
// Spark Streaming needs at least two working thread
val ssc = new StreamingContext("local[2]", "NetworkWordCount", Seconds(10))
// Create a DStream that will connect to serverIP:serverPort, like localhost:9999
val lines = ssc.socketTextStream("localhost", 9999)
// Split each line into words
val words = lines.flatMap(.split(" "))
// Count each word in each batch
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(
+ _)
wordCounts.print
ssc.start
ssc.awaitTermination
}
}

  1. 終端中切換目錄到這個(gè)項(xiàng)目根目錄弟塞,輸入命令 sbt , 命令運(yùn)行成功后拙已,敲入 eclipse 生成eclipse項(xiàng)目和項(xiàng)目所需依賴(lài)
  2. 同第一種方式的第1,3步决记,
    再打開(kāi)一個(gè)終端,輸入 命令 nc -lk 9999倍踪。
    然后運(yùn)行剛才寫(xiě)的main程序系宫,在nc終端中輸入一些字符串索昂,用空格隔開(kāi),回車(chē)扩借,如aa aa bb c椒惨。可以在ide控制臺(tái)中觀察到

-------------------------------------------
Time: 1415701670000 ms
-------------------------------------------
(aa,2)
(bb,1)
(c,1)

OK潮罪,成功康谆!


下面是遇到的問(wèn)題及解決方法:

1. 運(yùn)行程序說(shuō)找不到主類(lèi)

解:沒(méi)有在sbt文件配置主類(lèi)是哪個(gè),在build.sbt 文件中添加以下代碼

mainClass in (Compile, run) := Some("test.SparkTest")

Some中就是主類(lèi)的路徑

2. java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class

這個(gè)問(wèn)題困擾了我很長(zhǎng)時(shí)間嫉到,一直沒(méi)找到怎么解決沃暗。后來(lái)看到說(shuō)是scala每次版本升級(jí)不兼容以前的版本編譯的庫(kù),于是換了對(duì)應(yīng)的版本的ide才正常運(yùn)行何恶。
解:scala-ide版本和現(xiàn)在用的spark包依賴(lài)編譯的scala版本不一致孽锥, 請(qǐng)下載上面說(shuō)過(guò)的 scala-ide For Scala 2.10.4 版本。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末细层,一起剝皮案震驚了整個(gè)濱河市惜辑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌今艺,老刑警劉巖韵丑,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爵卒,死亡現(xiàn)場(chǎng)離奇詭異虚缎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)钓株,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)实牡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人轴合,你說(shuō)我怎么就攤上這事创坞。” “怎么了受葛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵题涨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我总滩,道長(zhǎng)纲堵,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任闰渔,我火速辦了婚禮席函,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冈涧。我一直安慰自己茂附,他們只是感情好正蛙,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著营曼,像睡著了一般乒验。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溶推,一...
    開(kāi)封第一講書(shū)人閱讀 49,950評(píng)論 1 291
  • 那天徊件,我揣著相機(jī)與錄音,去河邊找鬼蒜危。 笑死虱痕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辐赞。 我是一名探鬼主播部翘,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼响委!你這毒婦竟也來(lái)了新思?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赘风,失蹤者是張志新(化名)和其女友劉穎夹囚,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體邀窃,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荸哟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞬捕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞍历。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肪虎,靈堂內(nèi)的尸體忽然破棺而出劣砍,到底是詐尸還是另有隱情,我是刑警寧澤扇救,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布刑枝,位于F島的核電站,受9級(jí)特大地震影響迅腔,放射性物質(zhì)發(fā)生泄漏装畅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一钾挟、第九天 我趴在偏房一處隱蔽的房頂上張望洁灵。 院中可真熱鬧,春花似錦、人聲如沸徽千。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)双抽。三九已至百框,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牍汹,已是汗流浹背铐维。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慎菲,地道東北人嫁蛇。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像露该,于是被迫代替她去往敵國(guó)和親睬棚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容