官方学习网址:
https://spark.apache.org/docs/latest/streaming-programming-guide.html#a-quick-example
SparkStreaming介绍:
StreamingContext is the main entry point for all streaming functionality
要初始化Spark Streaming程序,必须创建一个StreamingContext对象,它是所有Spark Streaming功能的主要入口点。
def this(sparkContext: SparkContext, batchDuration: Duration) = {
this(sparkContext, null, batchDuration)
}
def this(conf: SparkConf, batchDuration: Duration) = {
this(StreamingContext.createNewSparkContext(conf), null, batchDuration)
}
batch interval可以根据你的应用程序需求的延迟要求以及集群可用的资源情况来设置
要记住的要点:
- 一旦上下文已经启动,就不能建立或添加新的流式计算。
- 一旦上下文被停止,它就不能被重新启动。
- 同时只有一个StreamingContext可以在JVM中处于活动状态。
- StreamingContext上的stop()也会停止SparkContext。要仅停止StreamingContext,请将可选参数
stop()
调用stopSparkContext
为false。 - 只要先前的StreamingContext在创建下一个StreamingContext之前停止(不停止SparkContext),就可以重新使用SparkContext来创建多个StreamingContext。
在定义上下文之后,您必须执行以下操作。
- 通过创建输入DStream来定义输入源。
- 通过将转换和输出操作应用于DStream来定义流式计算。
- 开始接收数据并使用它进行处理
streamingContext.start()
。 - 等待处理停止(手动或由于任何错误)使用
streamingContext.awaitTermination()
。 - 处理可以使用手动停止
streamingContext.stop()
。
Discretized Streams (DStream):
DStream是Spark Streaming提供的基本抽象。它表示连续的数据流,即从源接收的输入数据流或通过转换输入流生成的已处理数据流。
Internally, a DStream is represented by a continuous series of RDDs
Each RDD in a DStream contains data from a certain interval
对DStream操作算子,比如map/flatMap,其实底层会被翻译为对DStream中的每个RDD都做相同的操作;
因为一个DStream是由不同批次的RDD所构成的。
在DStream上应用的任何操作都会转化为对基础RDD的操作。
在本地运行Spark Streaming程序时,请勿使用“local”或“local [1]”作为主URL。这两者中的任何一个意味着只有一个线程将用于本地运行任务
在本地运行时,请始终使用“local [ n ]”作为主URL,其中n >要运行的接收器的数量
将逻辑扩展到在群集上运行,分配给Spark Streaming应用程序的内核数量必须多于接收器的数量。否则系统将接收数据,但无法处理它
Spark Streaming提供了两类内置流媒体源。
- 基本来源:StreamingContext API中直接可用的来源。示例:文件系统和套接字连接。
- 高级来源:可通过额外的实用程序课程获得Kafka,Flume,Kinesis等来源。这些要求链接部分中讨论的额外依赖关系 。