Spark StreamingContext对象(简写为ssc)是SparkStreaming的上下文对象,非常重要。本节就来介绍一下StreamingContext对象的详细知识。
1.StreamingContext对象的初始化
初始化StreamingContext对象有两种方式:1.从SparkConf对象中创建;2.从SparkContext对象中创建。
1.1从SparkConf对象创建StreamingContext
val sparkconf = new SparkConf().setAppName("WordCount").setMaster("local[2]")
val ssc = new StreamingContext(sparkconf, Seconds(3))
1.2从SparkContext对象创建StreamingContext
scala> import org.apache.spark.streaming.{Seconds, StreamingContext}
scala> val ssc = new StreamingContext(sc, Seconds(3))
程序中的几点说明:
- appName参数是应用程序在集群UI上显示的名字;
- master是Spark、Mesos、或者YARN集群的URL,或者是一个特殊的”local[*]”字符串来让程序以本地模式运行;
- 当在集群上运行程序时,不需要在程序中指定master参数,而是使用spark-submit提交应用程序并将master的URL以脚本参数的形式传入。但是对于本地测试和单元测试,可以使用”local[*]”来运行Spark Streaming程序(请确保CPU核数大于等于2);
- StreamingContext会在其内部创建一个SparkContext的实例(所有Spark功能的起始点),可以通过ssc.sparkContext访问该实例;
- 批处理的时间窗口长度必须根据应用程序的延迟要求和可用的集群资源进行设置。
2.StreamingContext对象的注意事项
- 一旦StreamingContext开始运作,就不能设置或添加新的流计算。
- 一旦一个上下文被停止,它将无法重新启动。
- 同一时刻,只有一个StreamingContext处于活动状态。
- StreamingContext的stop()方法也会停止SparkContext。如果只想停止StreamingContext,而不停止SparkContext,需要将stop()方法的可选参数stopSparkContext设置为false。
- 只要前一个STreamingContext在后一个StreamingContext被创建前停止(不停止SparkContext),SparkContext就可以被重用来创建多个StreamingContext。