Spark Streaming介紹以及案例

概觀

Spark Streaming是核心Spark API的擴展,可實現實時數據流的可擴展,高吞吐量,容錯流處理。

數據來源:Kafka,Flume,Kinesis或TCP套接字等,

可以使用高級函數進行復雜算法進行處理map,例如reducejoinwindow

處理後的數據可以推送到文件系統,數據庫等

 

Spark Streaming

它的工作原理:

Spark Streaming接收實時輸入數據流並將數據分成批處理,然後由Spark引擎處理以批量生成最終結果流

Spark Streaming

Spark Streaming提供稱爲離散流DStream的高級抽象,表示連續的數據流。DStream可以從來自Kafka,Flume和Kinesis等源的輸入數據流創建,也可以通過在其他DStream上應用高級操作來創建。在內部,DStream表示爲一系列 RDD。

案例介紹

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}

object StreamDemo {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[2]").setAppName("MyTest")
    val ssc = new StreamingContext(conf,Seconds(1))
//創建一個DStream來表示來自TCP源的流數據,指定爲主機名(例如localhost)和端口(例如9999)。
//此linesDStream表示將從數據服務器接收的數據流。DStream中的每條記錄都是一行文本
    val lines = ssc.socketTextStream("localhost",9999)
//flatMap是一對多DStream操作,它通過從源DStream中的每個記錄生成多個新記錄來創建新的DStream。在這種情況下,每行將被分成多個單詞,單詞流表示爲wordsDStream。
    val words = lines.flatMap(_.split(" "))
    val pairs = words.map(word => (word,1))
    val wordCount = pairs.reduceByKey(_+_)
    wordCount.print()
//Spark Streaming僅設置啓動時將執行的計算,並且尚未啓動實際處理。要在設置完所有轉換後開始處理
    ssc.start()
    ssc.awaitTermination()
  }
}

使用端口發送數據:

nc -lk 9999

查看端口使用情況:

lsof -i:9999

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章