spark streaming的原理
对于Spark Core它的核心就是RDD,对于Spark Streaming来说,它的核心是DStream,DStream类似于RDD,它实质上一系列的RDD的集合,DStream可以按照秒数将数据流进行批量的划分。首先从接收到流数据之后,将其划分为多个batch,然后提交给Spark集群进行计算,最后将结果批量输出到HDFS或者数据库以及前端页面展示等
官网解释:
Spark Streaming receives live input data streams and divides the data into batches,
which are then processed by the Spark engine to generate the final stream of results in batches
Spark Streaming接收实时输入数据流并将数据分成批处理,然后由Spark引擎处理以批量生成最终结果流。
Dstrenm
一个离散化的流(DStream),Spark流中的基本抽象,是一个连续的RDDs(相同类型)的序列, 代表连续的数据流
官网解释:
Discretized Stream or DStream is the basic abstraction provided by Spark Streaming.
It represents a continuous stream of data, either the input data stream received from source,
or the processed data stream generated by transforming the input stream. Internally,
a DStream is represented by a continuous series of RDDs, which is Spark’s abstraction of an immutable,
distributed dataset (see Spark Programming Guide for more details).
Discretized Streams或DStream是Spark Streaming提供的基本抽象。 它表示连续的数据流,即从源接收的输入数据流或通过转换输入流生成的已处理数据流。 在内部,DStream由连续的RDD系列表示,这是Spark对不可变的分布式数据集的抽象。 DStream中的每个RDD都包含来自特定时间间隔的数据.
应用于DStream的任何操作都转换为底层RDD上的操作。例如,在先前将行流转换为单词的示例中,flatMap操作应用于linesDStream中的每个RDD 以生成DStream的 wordsRDD。如下图所示。
经过一系列算子操作之后,最终可以将实时计算的结果存储到相关介质中
Discretized算子大全
window()
//两个重载方法,第一个只传窗口长度(滑动间隔默认为实例化ssc时的时间间隔),第二个传窗口长度与滑动间隔
reduceByWindow() //作用于key-value类型
//需要传3个参数,依次为reduce()方法,窗口长度,滑动长度。该方法的主要过程是:先将时间间隔内的数据调用reduce()算子聚合,然后调window()生成新的DStream,再将各间隔聚合完的结果聚合。
countByWindow()
//需要两个参数,依次为:窗口长度,滑动间隔该方法的主要过程为:先将每个元素生成长整数1,然后调用reduceByWindow()算子,将每个元素值相加。
countByValueAndWindow()
//需要三个参数,依次为:窗口长度,滑动间隔,分区数(有默认值,可不传)该方法的主要过程为:先将每个元素生成(元素,1L),然后调用reduceByKeyAndWindow(),可以理解为按key聚合,统计每个key的次数,也就是统计每个元素的次数
reduceByKeyAndWindow()
//该方法有6个重载方法,参数为:聚合函数,窗口长度该方法主要过程为:调reduceByKey()函数
updatestateByKey()
//所有的window操作都是计算长度为窗口长度的数据,非window操作都是计算设置的时间间隔内的数据,而updateBykey可以理解成在无限长的时间里,为每个key保存一个状态,这个时间长度可以通过ssc.awaitTerminationOrTimeout()来控制,一般来说长度每天或每小时
通常对于一个Spark Streaming的应用程序的编写分下面几步:
1、定义一个输入流源,比如获取socket端的数据,HDFS,kafka中数据等等
2、定义一系列的处理转换操作,比如map,reduce操作等等,Spark Streaming也有类似于SparkCore的transformation操作
3、启动程序收集数据( start() )
4、等待程序停止( 遇到错误终止或者手动停止awaitTermination() )
5、手动终止应用程序( stop() )