1. SparkStreaming
Spark Streaming可以輕松建構可擴充的容錯流應用程式。
便于使用
把之前學過的處理離線資料的算子直接拿來使用
容錯
sparkStreaming可以保證資料被消費一次
保證不丢失,不重複消費資料。
內建
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()
}
}