簡単な例をSparkStreaming
◆ストリーミングプログラムの構築:(WORDCOUNT)
◆使用するのに最適なプログラムストリーミングスパークMavenをスタンドアロンアプリケーションまたは実行のSBT翻訳の形でを。
◆調製:
JAR用の1スパークストリーミング導入
2.scalaストリーム・コンピューティングインポート宣言
インポートorg.apache.spark.streaming.StreamingContext
インポートorg.apache.spark.streaming.StreamingContext._の
インポートorg.apache.spark.streaming.dstream .DStream
インポートorg.apache.spark.streaming.Duration
インポートorg.apache.spark.streaming.Seconds
1.初期StreamingContextオブジェクト
// 1秒のローカルStreamingContext 2ワーカースレッドおよびバッチ間隔を作成します。
新しい新しいSparkConf CONF =ヴァル()
conf.setMaster( "ローカル[2]")
conf.setAppName( "NetworkWordCount")
ヴァルSSC =新しい新しいStreamingContext(CONF、秒(1))
2. DSTREAMオブジェクトを取得します。
// localhostのように、ホスト名DSTREAMへの接続を作成します:9999
ヴァル線= ssc.socketTextStream( "ローカルホスト"、9999)
3.操作DSTREAMオブジェクト
//受信データの各行は、スペースで単語に分割されています
lines.flatMapの言葉は=ヴァル(_。スプリット( ""))
// StreamingContextは、暗黙的な変換で導入
インポートorg.apache.spark.streaming.StreamingContext._
//バッチごとに合計に単語を変換します
words.mapペア=ヴァル(ワード=>(ワード,. 1))
ヴァルwordcounts = pairs.reduceByKey(_ _ +)
コンソールに10個の要素の前に//デフォルトの印刷各バッチを
wordCounts.print()
4.スタートストリームハンドラ
ssc.start //カウント
ssc.awaitTermination()//終了を待って計算します
ssc.stop()//エンド・アプリケーション
ネットワークポートを起動し、アナログデータ伝送
コマンドの1。NC手段は、データを手動で入力します
Linux / Macの場合:NC
Windowsの場合:猫
NC -lk 9999
シミュレーションデータジェネレータで書かれたコードを用いて2
パッケージcom.briup.streaming インポートてjava.io.PrintWriter インポートjava.net.ServerSocket インポートscala.io.Sourceの オブジェクトMassageServerを{ // ランダム整数取得メソッドの定義 DEFインデックス(長さ:INT)= { インポートjava.util.Randomの RDMヴァル = 新しい新しいランダム rdm.nextInt(長さ) } DEFメイン(引数:配列[文字列]){ のprintlnは(「アナログデータ開始!!!」) // 行指定されたファイルの総数取得 ヴァルファイル名=「スパーク/ ihaveadream.txt " ; ヴァル行 = Source.fromFile(ファイル名).getLines.toList ヴァルのfilerow =lines.length //するプログラムが要求したときに、外部接続が確立されたポートモニタを指定 ヴァル= ServerSocketを新しい新しい ServerSocketを(9999 ); ながら、(trueにする){ // ポート9999をリッスンし、ソケットオブジェクトを取得 ヴァルソケット= ServerSocket.accept() // println(ソケット) 新しい新しいスレッド(){ オーバーライドRUNのDEF = { (printlnの "接続されたクライアントからもらった:" + socket.getInetAddress) ヴァルOUT = 新新のPrintWriter(Socket.getOutputStream()、trueに) しばらく(真の){ Thread.sleep( 1000年) // ポートが相互にランダムなデータ伝送線を取得し、要求を受け入れ ヴァルコンテンツ=の行(インデックス(filerow)) のprintln(コンテンツ) out.write(コンテンツ + '\ N-' ) OUT。フラッシュ() } Socket.close() } } .start() } } }
注意事項:
◆ストリーミングがやっ1.スパークは、実行のフローを作成したすべてのステップの前に、プログラムが本当ではない
だけの実施計画のすべてを設定し、データ・ソースへの接続、また任意のデータ操作
するとssc.start(◆2。 )プログラムは、本当にすべての予想されるオペレーティング作る開始した後
、コールawaitTerminationフロー計算が完了するのを待つ必要があるので、◆3.実行は、別のスレッドで行われます
。4.◆ストリーミングコンテキストを一度だけ起動することができる
モードがローカルモードの場合◆5。 、、ローカル[n]を設定してくださいN> = 2 1つの処理するために、受信するための第
パッケージcom.briup.streaming インポートorg.apache.log4j {レベル、ロガー}。 インポートorg.apache.spark.SparkConfの インポートorg.apache.spark.streaming {期間、StreamingContext} オブジェクトMyTestOldAPI { DEFメイン(引数:配列[文字列]):単位 = { // 设置日志级别 Logger.getLogger( "ORG" ).setLevel(Level.WARN) // 1获取DS ヴァルのCONF = 新しい SparkConf()setAppName( "MyTestOldAPI")setMaster(」。ローカル[*]」) ヴァル・DSS = 新しい StreamingContext(confに、期間(1000年)) valのDSDss.socketTextStream =( "localhost"を、9999 ) // 2ロジック // 統計 ヴァル・RES = ds.filter(_!= "").FlatMap(_。スプリット( ""))。地図(ワード=>( ワード,. 1))。reduceByKey(_ + _) res.print() // 3オープンリアルタイム処理タスク dss.start() dss.awaitTermination() dss.stop() } }