Как настроить память драйвера при запуске Spark в локальном режиме через Sparklyr?

Я использую 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?


person jay    schedule 21.06.2017    source источник
comment
Я использую sparklyr_0.5.4-9004, spark 2.0.1 и R 3.4.0 на компьютере с Windows.   -  person jay    schedule 21.06.2017
comment
Привет, Джей, у меня сегодня такая же проблема, как и у тебя. Удалось ли вам найти решение за это время?   -  person Aydin K.    schedule 21.06.2017


Ответы (2)


Спасибо за предложения @Aydin K. В конечном итоге мне удалось настроить память драйвера, сначала обновив java до 64-битной (позволяет использовать> 4 ГБ ОЗУ в JVM), а затем используя параметры sparklyr.shell* в объекте spark_config():

config <- spark_config()
config$`sparklyr.shell.driver-memory` <- '30G'
config$`sparklyr.shell.executor-memory` <- '30G'
sc <- spark_connect(master='local', version='2.0.1', config=config)
person jay    schedule 27.06.2017

У меня была та же проблема, что и у вас, и мне не повезло с моим mavenized Java-приложением (local[*]) с настройкой параметров локальной памяти. Пробовал множество комбинаций (spark-env.sh, spark-defaults.conf и т. д.).

Поэтому я сделал следующее обходное решение:

1) Добавьте желаемые параметры размера памяти в: /opt/spark/conf/spark-defaults.conf

spark.driver.memory     4g
spark.executor.memory   2g

2) Создайте банку (mvn package в моем случае)

3) Отправьте заявку из командной строки через spark-submit:

spark-submit --repositories https://mvnrepository.com --packages graphframes:graphframes:0.5.0-spark2.1-s_2.10 --class com.mypackage.myApp --verbose --master local[*] ./target/com.mypackage.myApp-1.0.jar 

И вуаля, больше никаких проблем с нехваткой памяти в Java :-) Кроме того, пользовательский интерфейс искры теперь показывает правильное значение на вкладке исполнителя.

person Aydin K.    schedule 21.06.2017
comment
спасибо за предложенный обходной путь. Если я отправлю приложение spark напрямую с помощью spark-submit, то как мне «подключить» sparklyr к spark? В идеале я бы следовал рабочему процессу, описанному в документации sparklyr, т. е. отправлял код sparklyr в Spark через RStudio. - person jay; 22.06.2017
comment
Честно говоря, я не работал с RStudio и sparklyR, но вы также пробовали параметр --sparklyr.shell.executor-memory 5G (вместо параметра, связанного с драйвером) - person Aydin K.; 22.06.2017
comment
также взгляните на это решение: заголовок stackoverflow.com/questions/41384336/ - person Aydin K.; 22.06.2017