天天看點

Spark-Streaming的學習使用

1. SparkStreaming

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

   便于使用

   把之前學過的處理離線資料的算子直接拿來使用

   容錯

   sparkStreaming可以保證資料被消費一次

   保證不丢失,不重複消費資料。

   內建

   flume/kafka/tcp sockets

2. SparkStreaming計算架構

Spark-Streaming的學習使用

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()

  }
}


      

繼續閱讀