Spark-Streaming的學習使用

一行資料發表於2019-04-12

1. SparkStreaming

Spark Streaming可以輕鬆構建可擴充套件的容錯流應用程式。

  1. 便於使用
    把之前學過的處理離線資料的運算元直接拿來使用
  2. 容錯
    sparkStreaming可以保證資料被消費一次
    保證不丟失,不重複消費資料。
  3. 整合
    flume/kafka/tcp sockets

2. SparkStreaming計算架構

在這裡插入圖片描述

3. Dstream

編寫sparkStreaming程式需要了解Dstream。
一個抽象。流計算,資料來源往往分佈在多臺計算。
Dstream屬於離散(多臺機器)資料流,我們在streaming程式中以Dstream表示。
首先建立Dstream,對Dstream進行處理就可以了。
rdd的型別:
1)transformation
2) action
Dstream也存在Transformation與action。Dstream其實也就是對rdd的高階包裝。

Dstream如果接受實時的資料流會把資料切分為批次,這個批次會被spark引擎處理。
對於每個批次都會產生結果。

4.使用spark-Streaming進行流式wordcount計算

package day07

import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Milliseconds, StreamingContext}
import org.apache.spark.{SparkConf, SparkContext}

/*
rdd:建立程式入口 sparkContext
dataframe: sparkSession
Dstream:
 */

object WordCount {
  def main(args: Array[String]): Unit = {
    //1.建立sparkCOntect
    val conf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
    val sc = new SparkContext(conf)

    //2.建立streamingContext
    val ssc: StreamingContext = new StreamingContext(sc,Milliseconds(2000))

    //3.可以建立Dstream, 首先接入資料來源
    //socket
    val data: ReceiverInputDStream[String] =
      ssc.socketTextStream("192.168.64.111",7788)

    //4.進行計算,建立dstream
    val rd: DStream[(String, Int)] = data
      .flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)

    //5.列印結果
    rd.print()

    //6.注意:需要啟動sparstreaming程式
    ssc.start()
    ssc.awaitTermination()

  }
}



相關文章