2021SC@SDUSC
前言
上一篇博客讲到了receiverTracker和inputInfoTracker,接下来继续讲解
DStreamGraph
先看ssc.graph.clearMetadata(time)代码
// DStreamGraph.clearMetadata
def clearMetadata(time: Time) {
logDebug("Clearing metadata for time " + time)
this.synchronized {
outputStreams.foreach(_.clearMetadata(time))
}
logDebug("Cleared old metadata for time " + time)
}
其中清理了所有OutputDStream的一些相关元数据。
DStream.clearMetadata会清理掉当前DStream的rememberDuration之前的元数据。DStream的子类会覆写此方法。rememberDuration是DStream的成员。
spark.streaming.unpersist(默认是true)的配置可以用来设置是否自动非持久化。这可以显著的减少Spark在RDD上的内存使用,同时也可以改善GC行为。
rememberDuration在启动DStreamGraph时被设置,可参考DStream.initialize,这里不做更细的分析了。源码中的设置大体是sildeDuration,如果设置了checkpointDuration则是2*checkpointDuration.还可以通过DStreamGraph.rememberDuration设置:如果想自行设置,可以在应用程序中使用StreamingContext.remember方法,不过自行设置的值要大于内部计算得到的值时才会生效。
另外,后面的DStream会调整前面的DStream的rememberDuration,