Вы можете установить переменные окружения, используя: (например, в spark-env.sh
, только автономно)
SPARK_EXECUTOR_MEMORY=16g
Вы также можете установить spark-defaults.conf
:
spark.executor.memory=16g
Но эти решения жестко запрограммированы и в значительной степени статичны, и вы хотите иметь разные параметры для разных заданий, однако, вы можете установить некоторые значения по умолчанию.
Наилучший подход - использовать spark-submit
:
spark-submit --executor-memory 16G
Проблема программного определения переменных заключается в том, что некоторые из них необходимо определить во время запуска, если не вступят в силу правила предшествования, а ваши изменения после запуска задания будут игнорироваться.
Редактировать:
При создании SparkContext ищется объем памяти на каждого исполнителя.
И
, если объект SparkConf являетсяпередано в Spark, оно клонировано и больше не может быть изменено пользователем.Spark не поддерживает изменение конфигурации во время выполнения.
См .: Документация SparkConf
Вы пытались изменить переменную до создания SparkContext
, затемзапустить итерацию, остановить SparkContext
и изменить свою переменную для повторной итерации?
import org.apache.spark.{SparkContext, SparkConf}
val conf = new SparkConf.set("spark.executor.memory", "16g")
val sc = new SparkContext(conf)
...
sc.stop()
val conf2 = new SparkConf().set("spark.executor.memory", "24g")
val sc2 = new SparkContext(conf2)
Вы можете отладить свою конфигурацию, используя: sc.getConf.toDebugString
См .: Конфигурация Spark
Любые значения, указанные как флаги или в файле свойств, будут переданы приложению и объединены со значениями, указанными через SparkConf.Свойства, установленные непосредственно в SparkConf, имеют наивысший приоритет, затем флаги передаются в spark-submit или spark-shell, затем параметры в файле spark-defaults.conf.
Вам необходимо убедиться, чтоВаша переменная не определена с более высоким приоритетом.
Порядок приоритета:
- conf / spark-defaults.conf
- - conf или -c - команда-опция линии, используемая spark-submit
- SparkConf
Надеюсь, это поможет.