Spark源码走读12——Spark Streaming - 峰哥的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/huwenfeng_2011/article/details/43371325
Summarize
Spark Streaming实现了对实时流数据的高吞吐量、地容错的数据处理API。它的数据来源有很多种:Kafka、Flume、Twitter、ZeroMQ、TCP Scoket等。架构图如下:
Streaming接收实时流输入的数据,将其按批划分,然后交给Spark Enigne分批处理。如下图所示:
StreamingContext
和SparkContext相似。要使用Spark的流处理就必须创建StreamingContext对象。
DStream
DStream是Spark Streaming的是一个抽象类,离散流。她表示一个连续的流。是Spark的一个不可变的分布式数据抽象。
DStream上都用的到任何操作都会转换成底层的RDDs操作。而这些底层RDDs转换是由Spark Engine计算的。
DStream Transformation
离散流转换。DStream支持多种变换的基本SparkRDD使用。下面表格会介绍DStream中的一个基本转换方法:
//
UpdateStateByKey 有状态操作
UpdateStateByKey在有新的数据信息进入或更新时,可以让用户保持想要的任何状。使用这个功能需要完成两步:
1)定义状态:可以是任意数据类型
2)定义状态更新函数:用一个函数指定如何使用先前的状态,从输入流中的新值更新状态。
对于有状态操作,要不断的把当前和历史的时间切片的RDD累加计算,随着时间的流失,计算的数据规模会变得越来越大。
//
转换操作 无状态
对于无状态的操作,每一次操作都只是计算当前时间切片的内容,例如每次只计算1s的时间所产生的RDD数据
//
Window操作
Window操作是针对特定时间并以特定时间间隔为单位进行滑动的操作。比如在1s为时间切片的情况下,统计最近10min的SparkStreaming产生的数据。并且没2min更新一次。