Изменение конфигурации Spark во время выполнения

#apache-spark #configuration-files #runtime-configuration

#apache-spark #конфигурация-файлы #время выполнения-конфигурация

Вопрос:

Поэтому спрашиваю, знает ли кто-нибудь способ изменить свойства Spark (например, spark.executor.memory, spark.shuffle.spill.compress и т. Д.) Во время выполнения, Чтобы изменение могло вступить в силу между задачами / этапами во время задания…

Так что я это знаю…

1) В документации для Spark 2.0 (и предыдущих версий тоже) указано, что после создания контекста Spark его нельзя изменить во время выполнения.

2) SparkSession.conf.set, который может изменить некоторые вещи для SQL, но я рассматривал более общие, всеобъемлющие конфигурации.

3) Я мог бы запустить новый контекст в программе с новыми свойствами, но здесь речь идет о фактической настройке свойств после выполнения задания.

Идеи…

1) Приведет ли убийство исполнителя к повторному чтению файла конфигурации или он просто получит то, что уже настроено в начале задания?

2) Есть ли какая-либо команда для принудительного «обновления» свойств в контексте spark?

Так что надеюсь, что может быть способ или другие идеи (заранее спасибо)…

Комментарии:

1. Один пример того, где это может быть полезно: небольшое значение spark.locality.wait может быть подходящим для одного этапа обработки небольшого объема данных, тогда как на более позднем этапе обработки большого объема данных, вероятно, следует использовать большее значение для этого параметра.

Ответ №1:

После отправки приложения Spark мы можем изменить несколько значений параметров во время выполнения, а некоторые — нет.

Используя метод spark.conf.isModifiable(), мы можем проверить значение параметра, которое мы можем изменить во время выполнения, или нет. Если значение возвращает true, мы можем изменить значение параметра, в противном случае мы не можем изменить значение во время выполнения.

Примеры:

 >>> spark.conf.isModifiable("spark.executor.memory")
False 
>>> spark.conf.isModifiable("spark.sql.shuffle.partitions")
True
  

Итак, основываясь на приведенном выше тестировании, мы не можем изменить значение параметра spark.executor.memory во время выполнения.

Ответ №2:

Нет, невозможно изменить настройки, как spark.executor.memory во время выполнения.


Кроме того, вероятно, существует не так уж много отличных приемов в направлении «быстрого переключения на новый контекст», поскольку сила spark заключается в том, что он может собирать данные и продолжать работу. То, о чем вы, по сути, просите, — это платформа с уменьшением карты. Конечно, вы могли бы переписать свою работу в эту структуру и разделить работу на несколько заданий spark, но тогда вы потеряете часть простоты и производительности, которые дает spark. (Хотя, возможно, не все).

Если вы действительно считаете, что запрос имеет смысл на концептуальном уровне, вы можете рассмотреть возможность создания запроса функции. Это может быть сделано через вашего поставщика spark или напрямую путем регистрации Jira в проекте apache Spark.