Как задания назначаются исполнителям в Spark Streaming?

Скажем, у меня есть 2 или более исполнителей в приложении Spark Streaming.

Я установил периодическое время в 10 секунд, поэтому задание запускается каждые 10 секунд, считывая ввод с моего HDFS.

Если каждое задание длится более 10 секунд, новое задание, которое запускается, присваивается свободному исполнителю?

Даже если предыдущий не закончил?

Я знаю, что это кажется очевидным ответом, но я ничего не нашел о планировании работы на веб-сайте или на бумаге, связанной с Spark Streaming.

Если вы знаете некоторые ссылки, где объясняются все эти вещи, я был бы очень рад их видеть.

Спасибо.

Ответ 1

Фактически, в текущей реализации Spark Streaming и при настройке по умолчанию только работа активна (т.е. выполняется) в любой момент времени. Поэтому, если одна пакетная обработка занимает больше 10 секунд, тогда последующие пакетные задания останутся в очереди.

Это можно изменить с помощью экспериментального свойства Spark "spark.streaming.concurrentJobs", которое по умолчанию установлено в 1. Его в настоящее время не документировано (возможно, я должен добавить его).

Причина, по которой он установлен в 1, заключается в том, что параллельные задания могут потенциально привести к странному совместному использованию ресурсов и могут затруднить отладку того, достаточно ли ресурсов в системе для обработки поступающих данных достаточно быстро. С одной работой, выполняемой одновременно, легко видеть, что если время обработки партии < пакетный интервал, то система будет стабильной. Предоставлено, что это не может быть наиболее эффективным использованием ресурсов при определенных условиях. Мы определенно надеемся улучшить это в будущем.

В этом слайде meetup есть немного материала о внутренних компонентах Spark Streaming (извините, о бесстыдной саморекламе:)). Это может быть полезно для вас.