核心概念:
StreamingContext:
def this(sparkContext: SparkContext, batchDuration: Duration) = {
this(sparkContext, null, batchDuration)
}
def this(conf: SparkConf, batchDuration: Duration) = {
this(StreamingContext.createNewSparkContext(conf), null, batchDuration)
}
在定义一个 context 之后,您必须执行以下操作.
通过创建输入 DStreams 来定义输入源.
通过应用转换和输出操作 DStreams 定义流计算(streaming computations).
开始接收输入并且使用 streamingContext.start() 来处理数据.
使用 streamingContext.awaitTermination() 等待处理被终止(手动或者由于任何错误).
使用 streamingContext.stop() 来手动的停止处理.
需要记住的几点:
一旦一个 context 已经启动,将不会有新的数据流的计算可以被创建或者添加到它。.
一旦一个 context 已经停止,它不会被重新启动.
同一时间内在 JVM 中只有一个 StreamingContext 可以被激活.
在 StreamingContext 上的 stop() 同样也停止了 SparkContext 。为了只停止 StreamingContext ,设置 stop() 的可选参数,名叫 stopSparkContext 为 false.
一个 SparkContext 就可以被重用以创建多个 StreamingContexts,只要前一个 StreamingContext 在下一个StreamingContext 被创建之前停止(不停止 SparkContext).
Discretized Streams -->DStreams: sparkStreaming最基本的抽象,sparkStreaming的编程都是基于DStream的
持续化的数据流,一个DStream代表一系列不间断的rdd
对DSteram操作算子,比如map/flatMap,其实底层会被翻译为对DStream中的每个rdd做相同的操作,因为一个DStream是由不同批次的rdd构成的
Input DStreams 和 Receivers(接收器)
input DStream 是代表输入数据是从流的源数据(streaming sources)接收到的流的 DStream.
在 一个入门示例 中, lines 是一个 input DStream, 因为它代表着从 netcat 服务器接收到的数据的流.
每一个 input DStream(除了 file stream 之外)与一个 Receiver 对象关联, 它从 source(数据源)中获取数据,并且存储它到 Spark 的内存中用于处理.
与 RDD 类似,transformation 允许从 input DStream 输入的数据做修改. DStreams 支持很多在 RDD 中可用的 transformation 算子