Я пытаюсь понять, как Spark управляет задачами на сцене.
Рассмотрим этот сценарий:
У нас есть задание Spark, которое выполняет секционированное (20 разделов) чтение некоторой таблицы базы данных (скажем, Postgres и разделы хорошо сбалансированы) и записывает эту таблицуна диск с таким же параллелизмом (нет тасования, поэтому у нас должен быть один этап с 20 задачами).
Теперь, допустим, у нас есть один исполнитель, такой, что ограничения / конфигурация памяти Spark / system позволяют нам толькохранить один раздел в памяти за раз (но мы можем хранить все разделы на диске!).
Будет ли исполнитель просто раскручивать потоки для каждой задачи и запускать их одновременно?Есть ли у него механизмы для «просто» запуска одной задачи в одно и то же время, если да, то как он знает, как это сделать, если не знает, насколько большими будут разделы априори?Кроме того, как сохранение с помощью опции MEMORY_AND_DISK_SER
применяется в одну стадию?
Из документов в разделе перетасовки:
Если данные не помещаются в памяти, Spark будет разливать ихтаблиц на диск, что приводит к дополнительным расходам дискового ввода-вывода и увеличению сбора мусора.
Я не вижу, как это работает в случае, который я описал выше, кроме того, если это поведение не зависитмеханизмов постоянства, как эти два взаимодействуют в этом сценарии, предполагая, что это установлено выше.