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