Как установить `spark.driver.memory` в режиме клиента - pyspark (версия 2.3.1) - PullRequest
0 голосов
/ 04 декабря 2018

Я новичок в PySpark и пытаюсь использовать pySpark (версия 2.3.1) на локальном компьютере с Jupyter-Notebook .

Я хочу установить spark.driver.memory на 9 Гб, выполнив это:

spark = SparkSession.builder \
       .master("local[2]") \
       .appName("test") \
       .config("spark.driver.memory", "9g")\
       .getOrCreate()
sc = spark.sparkContext
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

spark.sparkContext._conf.getAll()  # check the config

Возвращает

[('spark.driver.memory', '9g'),
('spark.driver.cores', '4'),
('spark.rdd.compress', 'True'),
('spark.driver.port', '15611'),
('spark.serializer.objectStreamReset', '100'),
('spark.app.name', 'test'),
('spark.executor.id', 'driver'),
('spark.submit.deployMode', 'client'),
('spark.ui.showConsoleProgress', 'true'),
('spark.master', 'local[2]'),
('spark.app.id', 'local-xyz'),
('spark.driver.host', '0.0.0.0')]

Это довольно странно, потому что, когда я смотрю наВ документе показано, что

Примечание. В режиме клиента этот параметр не должен быть установлен через SparkConf непосредственно в приложении, поскольку драйверJVM уже началась в этот момент.Вместо этого, пожалуйста, установите это с помощью параметра командной строки --driver-memory или в вашем файле свойств по умолчанию. документ здесь

Но, как вы видите в результате выше, он возвращает

[('spark.driver.memory', '9g')

Даже когда я получаю доступ к веб-интерфейсу spark (на порту 4040 , environment tab), он все равно показываетenter image description here

Я попробовал еще раз, с 'spark.driver.memory', '10g'. веб-интерфейс и spark.sparkContext._conf.getAll() вернули '10g' .Я так смущен этим.Мои вопросы:

  1. Правильно ли документ о spark.driver.memory config

  2. Если документ верный, есть ли правильный способ, которым яможете проверить spark.driver.memory после конфигурации.Я пробовал spark.sparkContext._conf.getAll(), а также Spark Web UI , но, похоже, это привело к неправильному ответу.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Да, документация правильная.Память должна быть указана до запуска JVM.После запуска JVM, даже если вы измените значение свойства программно внутри приложения, оно не будет сбрасывать память, выделенную JVM.Проверить выделенную и использованную память драйвера можно на вкладке «Исполнители» пользовательского интерфейса Spark.

Примечание. В режиме клиента этот конфигурационный файл нельзя устанавливать через SparkConf непосредственно в приложении, поскольку JVM драйверав этот момент уже началось.

enter image description here

0 голосов
/ 04 декабря 2018

Вы предоставили следующий код.

spark = SparkSession.builder \
       .master("local[2]") \
       .appName("test") \
       .config("spark.driver.memory", "9g")\ # This will work (Not recommended)
       .getOrCreate()
sc = spark.sparkContext
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

Этот конфиг не должен быть установлен через SparkConf напрямую

означает, что вы можете установить память драйвера, но это не рекомендуется на RUN TIME .Следовательно, если вы установите его с помощью spark.driver.memory, он примет изменение и переопределит его.Но это не рекомендуется.Таким образом, этот конкретный комментарий ** этот конфиг не должен быть установлен через SparkConf напрямую **, не применяется в документации.Вы можете указать JVM создать себе экземпляр (JVM) с 9g памяти драйвера, используя SparkConf.

Теперь, если вы перейдете по этой строке ( Spark в порядке с этим )

Вместо этого, пожалуйста, установите это через --driver-memory, это означает, что

, когда вы пытаетесь отправить Spark задание против clientВы можете установить память драйвера, используя флаг --driver-memory, скажем,

spark-submit --deploy-mode client --driver-memory 12G

Теперь строка заканчивается следующей фразой

или в файле свойств по умолчанию.

Вы можете указать SPARK в вашей среде, чтобы он считывал настройки по умолчанию из SPARK_CONF_DIR или $SPARK_HOME/conf, где можно настроить driver-memory. Spark также подойдет для этого.

Чтобы ответить на вторую часть

Если документ верный, есть ли способ проверить искру.driver.memory после конфига.Я пробовал spark.sparkContext._conf.getAll (), а также веб-интерфейс Spark, но, похоже, это приводит к неправильному ответу. "

Я хотел бы сказать, что документация верна. Вы можетепроверьте память драйвера, используя или, в конце концов, то, что вы указали для spark.sparkContext._conf.getAll(), тоже работает.

>>> sc._conf.get('spark.driver.memory')
u'12g' # which is 12G for the driver I have used

Чтобы завершить документацию. Вы можете установить "spark.driver.memory" в

  • spark-shell, Jupyter Notebook или любая другая среда, в которой вы уже инициализировали Spark ( Не рекомендуется ).
  • spark-submit команда (рекомендуется)
  • SPARK_CONF_DIR или SPARK_HOME/conf (рекомендуется)
  • Вы можете начать spark-shell, указав

    spark-shell --driver-memory 9G

Для получения дополнительной информации см.

Файл свойств Spark по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...