http://spark.apache.org/docs/latest/streaming-programming-guide.html
Spark官网已经已经将用法与概念写的很详细了。这里写一点平时需要注意的要点。
Spark:是以批处理为主,用微批处理来处理流数据
Flink:以流处理为主,用流处理来处理批数据
StreamingContext
ssc ==> Source ==> DStream ==> Transformation ==> Ouput
StreamingContext是所有流功能的主要入口点
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))
进入StreamingContext源码发现有一个主构造器与两个附属构造器
class StreamingContext private[streaming] (
_sc: SparkContext,
_cp: Checkpoint,
_batchDur: Duration
)
def this(sparkContext: SparkContext, batchDuration: Duration) = {
this(sparkContext, null, batchDuration)
}
def this(conf: SparkConf, batchDuration: Duration) = {
this(StreamingContext.createNewSparkContext(conf), null, batchDuration)
}
要记住的要点:
- 一旦启动了上下文,就不能设置或添加新的流式计算。
- 上下文停止后,无法重新启动。
- 在JVM中只能同时激活一个StreamingContext。
- StreamingContext上的stop()也会停止SparkContext。要仅停止StreamingContext,请将stop()called 的可选参数设置- stopSparkContext为false。
- 只要在创建下一个StreamingContext之前停止前一个StreamingContext(不停止SparkContext),就可以重复使用SparkContext创建多个StreamingContexts。
Input DStreams and Receivers:
Input Dstreams分为两种:一种是有receiver的,一种是没有receiver的(t