我正在使用 Sparklyr 在具有 244GB RAM 的虚拟机上以本地模式运行 Spark 应用程序。在我的代码中我使用spark_read_csv()
从一个文件夹读取约 50MB 的 csv,然后从第二个文件夹读取约 1.5GB 的 csv。我的问题是应用程序在尝试读取第二个文件夹时抛出错误。
据我了解,问题在于驱动程序 JVM 可用的默认 RAM 为 512MB - 对于第二个文件夹来说太小(在本地模式下,所有操作都在驱动程序 JVM 中运行,如此处所述)如何设置 Apache Spark Executor 内存 https://stackoverflow.com/questions/26562033/how-to-set-apache-spark-executor-memory。所以我需要增加spark.driver.memory
参数到更大的东西。
问题是我无法通过中描述的正常方法设置此参数Sparklyr 文档 http://spark.rstudio.com/deployment.html(即通过spark_config()
, the config.yml
文件,或spark-defaults.conf
file):
在本地模式下,当您运行spark-submit时,JVM已经使用默认内存设置启动,因此在conf中设置“spark.driver.memory”实际上不会为您做任何事情。相反,您需要运行spark-submit,如下所示:
bin/spark-submit --driver-memory 2g --class your.class.here app.jar
(from 如何设置 Apache Spark Executor 内存 https://stackoverflow.com/questions/26562033/how-to-set-apache-spark-executor-memory).
我以为我可以复制bin/spark-submit
上面的命令添加sparklyr.shell.driver-memory
的选项config.yml
;如 Sparklyr 文档中所述;sparklyr.shell*
选项是传递给的命令行参数spark-submit
,即添加sparklyr.shell.driver-memory: 5G
to the config.yml
文件应该相当于运行bin/spark-submit --driver-memory 5G
.
我现在已经尝试了上述所有选项,但它们都没有更改 Spark 应用程序中的驱动程序内存(我通过查看 Spark UI 的“执行器”选项卡进行检查)。
那么,当通过 Sparklyr 以本地模式运行 Spark 时,如何更改驱动程序内存呢?