Улучшенная обработка выключения нод в Spark 3
Функция SPARK-20624 служит для повышения надежности и производительности Spark в случае использования Spot-нод.
Таким образом, можно сказать, что новая функция Spark: - выключает исполнитель постепенно и без потери данных; - предотвращает внезапное уничтожение спотов.
Но давайте разберем все более подробно:
- Исполнитель, подлежащий выключению, заносится в black list, в результате чего драйвер Spark больше не назначает ему новые задачи. При этом исполняемые задачи принудительно не прерываются, однако если они сбоят по причине остановки исполнителя, они перезапустятся в другом исполнителе.
- Кэшированные данные и Shuffle-файлы мигрируют из одного выключаемого исполнителя в другой. При этом если другого нет (к примеру, единственный исполнитель выключен), есть возможность настройки объектного хранилища (типа S3) в роли запасного.
- После того, как миграция завершится, исполнитель "умрет", а Spark-приложение продолжит работать как будто ничего не произошло.
Когда работает функция?
Это происходит в следующих случаях:
- При применении Spot/вытесняемых нод облачный провайдер уведомит о выключении за 60–120 сек. Spark способен использовать это время в целях сохранения важных shuffle-файлов. Такой механизм используется и тогда, когда экземпляр, находящийся на стороне провайдера, по каким-либо причинам выключают, к примеру, в случае обслуживания EC2.
- Если нода Kubernetes пустеет, допустим, для того же техобслуживания либо если вытесняется под Spark-исполнителя тем же более высокоприоритетным подом.
- Если убранный исполнитель -- это часть динамического выделения в случае уменьшения размера системы по причине простоя исполнителя. В вышеописанном случае, кстати, тоже будут сохранены как кэш, так и shuffle-файлы.
Как включить?
Функция включается посредством конфигурационных флагов. Надо включить 4 основных флага Spark:
Другие настройки, которые доступны, можно поискать непосредственно в исходном коде.
Остается добавить, что для получения предупреждения о скором отключении ноды от облачного провайдера в случае того же выключения спота, потребуется специфическая интеграция.
По материалам https://towardsdatascience.com/apache-spark-3-1-release-spark-on-kubernetes-is-now-generally-available-65cccbf1436b.