Установить конфигурацию свечи - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь настроить конфигурацию нескольких параметров искры внутри оболочки pyspark.

Я попробовал следующее

spark.conf.set("spark.executor.memory", "16g")

Чтобы проверить, была ли установлена ​​память исполнителя, я сделал следующее spark.conf.get("spark.executor.memory")

, который возвратил "16g".

Я пытался проверить это через sc, используя sc._conf.get("spark.executor.memory")

и это вернулось "4g".

Почему эти два возвращают разные значения и как правильно настроить эти конфигурации.

Кроме того, я играю с такими параметрами, как "spark.executor.instances" "spark.executor.cores" "spark.executor.memory" "spark.executor.memoryOverhead" "spark.driver.memory" "spark.driver.cores" "spark.driver.memoryOverhead" "spark.memory.offHeap.size" "spark.memory.fraction" "spark.task.cpus" "spark.memory.offHeap.enabled " "spark.rpc.io.serverThreads" "spark.shuffle.file.buffer"

Есть ли способ установить конфигурации для всех переменных.

EDIT

Мне нужно установить конфигурацию программно. Как я могу изменить его после того, как я выполнил spark-submit или запустил оболочку pyspark? Я пытаюсь сократить время выполнения моих заданий, для которых я прохожу несколько итераций, меняя конфигурацию искры и записывая время выполнения.

1 Ответ

1 голос
/ 08 марта 2019

Вы можете установить переменные окружения, используя: (например, в 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

Надеюсь, это поможет.

...