Я использую Sparklyr для запуска приложения Spark в локальном режиме на виртуальной машине с 244 ГБ ОЗУ. В моем коде я использую spark_read_csv()
для чтения ~ 50 МБ CSV-файлов из одной папки, а затем ~ 1,5 ГБ CSV-файлов из второй папки. Моя проблема в том, что приложение выдает ошибку при попытке чтения во второй папке.
Насколько я понимаю, проблема в том, что оперативная память по умолчанию, доступная для JVM драйвера, составляет 512 МБ - слишком мало для второй папки (в локальном режиме все операции выполняются внутри JVM драйвера, как описано здесь Как установить память Apache Spark Executor. Поэтому мне нужно увеличить параметр spark.driver.memory
до большего.
Проблема в том, что я не могу установить этот параметр обычными методами, описанными в документации по sparklyr (т.е. через spark_config()
, файл config.yml
или файл spark-defaults.conf
):
в локальном режиме к тому времени, когда вы запускаете spark-submit, JVM уже запущена с настройками памяти по умолчанию, поэтому установка «spark.driver.memory» в вашей конфигурации фактически ничего для вас не сделает. Вместо этого вам нужно запустить spark-submit следующим образом:
bin/spark-submit --driver-memory 2g --class your.class.here app.jar
(из Как установить память Apache Spark Executor).
Я подумал, что смогу воспроизвести приведенную выше команду bin/spark-submit
, добавив параметр sparklyr.shell.driver-memory
к config.yml
; как указано в документации Sparklyr; Параметры sparklyr.shell*
— это параметры командной строки, которые передаются spark-submit
, т. е. добавление sparklyr.shell.driver-memory: 5G
в файл config.yml
должно быть эквивалентно запуску bin/spark-submit --driver-memory 5G
.
Теперь я попробовал все вышеперечисленные варианты, и ни один из них не меняет память драйвера в приложении Spark (что я проверяю, просматривая вкладку «Исполнители» пользовательского интерфейса Spark).
Итак, как я могу изменить память драйвера при запуске Spark в локальном режиме через Sparklyr?