Spark Streaming使用离散化流作为抽象表示,叫做DStream。Dstream是随着时间推移而收到的数据的序列。在内部,每个时间区间收到的数据都作为RDD存在,DStream是由这些RDD所组成的序列。DStream可以从各种输入源创建,如Flume,Kafka或者HDFS。创建出来的DStream支持两种操作,转化和输出。
Spark Streaming的高层次架构
DStream及其转化关系
Spark Streaming在Spark各组件中的执行过程
转化操作
DStream的转化操作分为以下两种:
无状态转化:无状态转化操作就是简单把RDD转化操作应用到每个批次上。
在无状态转化操作中,每个批次的处理不依赖于之前批次的数据,像RDD的map,filter,reduceBykey等操作都是无状态转化操作。
有状态转化:DSteam的有状态转化操作是跨时间区间跟踪数据的操作,即一些先前批次的数据也被用来在新的批次中计算结果。
有状态转化操作需要使用之前批次的数据或者中间结果来计算当前批次的数据。有状态转化操作包括基于滑动窗口的转化操作和追踪状态变化的转化操作。
输出操作
输出操作指定了对流数据经转化操作得到的数据所要执行的操作,一旦调试好了程序,就可以使用输出操作来保存结果了。在Scala中将DStream保存为文件:
还可以用saveAsHadoopFiles()函数,接收Hadoop输出格式存储。存储SequenceFile Spark Streaming比较特殊:
还有一个通用的输出操作foreachRDD(),用来对DStream中的RDD运行任意计算:
领取专属 10元无门槛券
私享最新 技术干货