HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p><strong>Функция<a>SPARK-20624</a></strong>служит для повышения надежности и производительности Spark в случае использования Spot-нод. Перед остановкой спота shuffle-данные и содержимое кэша перемещаются, в результате чего влияние на работу Spark-приложения становится минимальным. Раньше, когда система "убивала" спот, shuffle-файлы полностью терялись, а значит, их надо было вычислять заново, то есть надо было заново выполнять потенциально долгие задачи. Но появилась новая фича, которая уже не требует настроек внешнего shuffle-сервиса, совместимого с Kubernetes (ну и, соответственно, отпала необходимость в запуске дорогих нод хранения).</p>
1 <p><strong>Функция<a>SPARK-20624</a></strong>служит для повышения надежности и производительности Spark в случае использования Spot-нод. Перед остановкой спота shuffle-данные и содержимое кэша перемещаются, в результате чего влияние на работу Spark-приложения становится минимальным. Раньше, когда система "убивала" спот, shuffle-файлы полностью терялись, а значит, их надо было вычислять заново, то есть надо было заново выполнять потенциально долгие задачи. Но появилась новая фича, которая уже не требует настроек внешнего shuffle-сервиса, совместимого с Kubernetes (ну и, соответственно, отпала необходимость в запуске дорогих нод хранения).</p>
2 <p>Таким образом, можно сказать, что новая функция Spark: - выключает исполнитель постепенно и без потери данных; - предотвращает внезапное уничтожение спотов.</p>
2 <p>Таким образом, можно сказать, что новая функция Spark: - выключает исполнитель постепенно и без потери данных; - предотвращает внезапное уничтожение спотов.</p>
3 <p>Но давайте разберем все более подробно:</p>
3 <p>Но давайте разберем все более подробно:</p>
4 <ol><li>Исполнитель, подлежащий выключению, заносится в black list, в результате чего драйвер Spark больше не назначает ему новые задачи. При этом исполняемые задачи принудительно не прерываются, однако если они сбоят по причине остановки исполнителя, они перезапустятся в другом исполнителе.</li>
4 <ol><li>Исполнитель, подлежащий выключению, заносится в black list, в результате чего драйвер Spark больше не назначает ему новые задачи. При этом исполняемые задачи принудительно не прерываются, однако если они сбоят по причине остановки исполнителя, они перезапустятся в другом исполнителе.</li>
5 <li>Кэшированные данные и Shuffle-файлы мигрируют из одного выключаемого исполнителя в другой. При этом если другого нет (к примеру, единственный исполнитель выключен), есть возможность настройки объектного хранилища (типа S3) в роли запасного.</li>
5 <li>Кэшированные данные и Shuffle-файлы мигрируют из одного выключаемого исполнителя в другой. При этом если другого нет (к примеру, единственный исполнитель выключен), есть возможность настройки объектного хранилища (типа S3) в роли запасного.</li>
6 <li>После того, как миграция завершится, исполнитель "умрет", а Spark-приложение продолжит работать как будто ничего не произошло.</li>
6 <li>После того, как миграция завершится, исполнитель "умрет", а Spark-приложение продолжит работать как будто ничего не произошло.</li>
7 </ol><h2>Когда работает функция?</h2>
7 </ol><h2>Когда работает функция?</h2>
8 <p>Это происходит в следующих случаях:</p>
8 <p>Это происходит в следующих случаях:</p>
9 <ol><li>При применении Spot/вытесняемых нод облачный провайдер уведомит о выключении за 60-120 сек. Spark способен использовать это время в целях сохранения важных shuffle-файлов. Такой механизм используется и тогда, когда экземпляр, находящийся на стороне провайдера, по каким-либо причинам выключают, к примеру, в случае обслуживания EC2.</li>
9 <ol><li>При применении Spot/вытесняемых нод облачный провайдер уведомит о выключении за 60-120 сек. Spark способен использовать это время в целях сохранения важных shuffle-файлов. Такой механизм используется и тогда, когда экземпляр, находящийся на стороне провайдера, по каким-либо причинам выключают, к примеру, в случае обслуживания EC2.</li>
10 <li>Если нода Kubernetes пустеет, допустим, для того же техобслуживания либо если вытесняется под Spark-исполнителя тем же более высокоприоритетным подом.</li>
10 <li>Если нода Kubernetes пустеет, допустим, для того же техобслуживания либо если вытесняется под Spark-исполнителя тем же более высокоприоритетным подом.</li>
11 <li>Если убранный исполнитель -- это часть динамического выделения в случае уменьшения размера системы по причине простоя исполнителя. В вышеописанном случае, кстати, тоже будут сохранены как кэш, так и shuffle-файлы.</li>
11 <li>Если убранный исполнитель -- это часть динамического выделения в случае уменьшения размера системы по причине простоя исполнителя. В вышеописанном случае, кстати, тоже будут сохранены как кэш, так и shuffle-файлы.</li>
12 </ol><h2>Как включить?</h2>
12 </ol><h2>Как включить?</h2>
13 <p>Функция включается посредством конфигурационных флагов. Надо включить 4 основных флага Spark:</p>
13 <p>Функция включается посредством конфигурационных флагов. Надо включить 4 основных флага Spark:</p>
14 <p>Другие настройки, которые доступны, можно поискать непосредственно в<a>исходном коде</a>.</p>
14 <p>Другие настройки, которые доступны, можно поискать непосредственно в<a>исходном коде</a>.</p>
15 <p>Остается добавить, что для получения предупреждения о скором отключении ноды от облачного провайдера в случае того же выключения спота, потребуется специфическая интеграция.</p>
15 <p>Остается добавить, что для получения предупреждения о скором отключении ноды от облачного провайдера в случае того же выключения спота, потребуется специфическая интеграция.</p>
16 <p><em>По материалам https://towardsdatascience.com/apache-spark-3-1-release-spark-on-kubernetes-is-now-generally-available-65cccbf1436b.</em></p>
16 <p><em>По материалам https://towardsdatascience.com/apache-spark-3-1-release-spark-on-kubernetes-is-now-generally-available-65cccbf1436b.</em></p>
17  
17