2016-11-09 4 views
0

ich auf einer Streaming-Anwendung arbeite, die ich eine große RDD am Cachen (das nur im Speicher ist) ..einen großen Strom Caching

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

ich nicht wissen wollte fit sein, wenn die DSTREAM kann in der Speicher .. Wird der RDD neu berechnet oder eine Ausnahme ausgelöst?

Ich stelle diese Frage, da ich mapwithState Funktion entwickle, die intern verwendet einen internen Strom eine Stateful-Anwendung verwendet, die nur im Speicher presisted wird. (https://github.com/wliuxad/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/dstream/MapWithStateDStream.scala#L109-109)

Antwort

0

Abhängig von dem RDD wir reden. MapWithStateDStream speichert die Daten in einem OpenHashMapBasedStateMap zwischen. Es wird nicht auf die Festplatte ausgelagert. Dies bedeutet, dass Sie genügend Speicher haben müssen, damit Ihre Anwendung ordnungsgemäß funktioniert. Wenn Sie darüber nachdenken, wie können Sie den Staat vertreiben? Es ist nicht eine RDD, die beibehalten wird, es ist Teil Ihrer Anwendungslogik.

Eine Sache, die vertrieben wird ist die zwischengespeicherte RDD von Ihrer Quelle. Von Ihrem vorherigen Beispiel sehe ich, dass Sie Kafka verwenden, was bedeutet, dass die zwischengespeicherten KafkaRDD geräumt werden, sobald Spark es für richtig hält.