缓存大流

时间:2016-11-09 00:35:38

标签: apache-spark spark-streaming

我正在开发一个流媒体应用程序,我正在缓存一个大型RDD(仅在内存中)..

Dstream.cache()
Dstream.foreachRDD(..)
Dstream.foreachRDD(..)

我想知道Dstream是否无法适应内存.. RDD是否重新计算或引发异常?

我问这个问题,因为我正在使用mapwithState函数开发一个有状态的应用程序,该函数在内部使用仅在内存中存在的内部流。(https://github.com/wliuxad/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/dstream/MapWithStateDStream.scala#L109-109

1 个答案:

答案 0 :(得分:0)

取决于我们正在谈论的RDD。 MapWithStateDStream将数据缓存在OpenHashMapBasedStateMap中。它不会溢出到磁盘上。这意味着您需要有足够的内存才能使应用程序正常工作。当你想到它时,你怎么能驱逐国家?它不是一些持久存在的RDD,它是应用程序逻辑的一部分

被驱逐的一件事是来自您的来源的缓存RDD。从您之前的示例中我看到您正在使用Kafka,这意味着一旦Spark认为适合,缓存的KafkaRDD将被逐出。