Внутри DStream представлен как последовательность RDD, которая является абстракцией Spark неизменяемого, распределенного набора данных.Каждый RDD в DStream содержит данные за определенный интервал
В примере подсчета слов: -
import org.apache.spark.streaming.StreamingContext._ // not necessary since Spark 1.3
// Count each word in each batch
val pairs = words.map(word => (word, 1))
val wordCounts = pairs.reduceByKey(_ + _)
// Print the first ten elements of each RDD generated in this DStream to the console
wordCounts.print()
Таким образом, RDD создается в драйвере для блоков, созданных во время batchInterval.Блоки, сгенерированные во время batchInterval, являются разделами RDD.Каждый раздел является задачей в искре.blockInterval == batchinterval будет означать, что один раздел создан и, вероятно, он обрабатывается локально.
DStreams выполняются с лёгкостью с помощью операций вывода, так же как RDD лениво выполняются с помощью RDD.
DStream будет выполняться, как только будет запущен триггер, если ваш временной интервал равен 2 секундам, задание будет запускаться каждые 2 секунды, в основном точкой запуска является не доступность данных, а длительность пакета, если данные присутствуют в то время, когдаDStream содержит данные, в противном случае они будут пустыми.
DStream на самом деле является последовательностью СДР из кода DStream: -
// RDDs generated, marked as private[streaming] so that testsuites can access it
@transient
private[streaming] var generatedRDDs = new HashMap[Time, RDD[T]]()
количество сгенерированных исполнителей зависит от раздела, а также от конфигурациипредоставлено.
Обычно в конфигурации есть два типа выделения: статическое и динамическое.Вы можете прочитать о них здесь: -
http://site.clairvoyantsoft.com/understanding-resource-allocation-configurations-spark-application/