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