Как Spark сохраняет разделы на одном этапе? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь понять, как Spark управляет задачами на сцене.

Рассмотрим этот сценарий:

У нас есть задание Spark, которое выполняет секционированное (20 разделов) чтение некоторой таблицы базы данных (скажем, Postgres и разделы хорошо сбалансированы) и записывает эту таблицуна диск с таким же параллелизмом (нет тасования, поэтому у нас должен быть один этап с 20 задачами).

Теперь, допустим, у нас есть один исполнитель, такой, что ограничения / конфигурация памяти Spark / system позволяют нам толькохранить один раздел в памяти за раз (но мы можем хранить все разделы на диске!).

Будет ли исполнитель просто раскручивать потоки для каждой задачи и запускать их одновременно?Есть ли у него механизмы для «просто» запуска одной задачи в одно и то же время, если да, то как он знает, как это сделать, если не знает, насколько большими будут разделы априори?Кроме того, как сохранение с помощью опции MEMORY_AND_DISK_SER применяется в одну стадию?

Из документов в разделе перетасовки:

Если данные не помещаются в памяти, Spark будет разливать ихтаблиц на диск, что приводит к дополнительным расходам дискового ввода-вывода и увеличению сбора мусора.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...