我正在使用 Sparklyr 在具有 244GB RAM 的虚拟机上以本地模式运行 Spark 应用程序。在我的代码中,我使用 spark_read_csv()
从一个文件夹中读取约 50MB 的 csv,然后从第二个文件夹中读取约 1.5GB 的 csv。我的问题是应用程序在尝试读取第二个文件夹时抛出错误。
据我了解,问题在于驱动程序 JVM 可用的默认 RAM 为 512MB - 对于第二个文件夹来说太小(在本地模式下,所有操作都在驱动程序 JVM 中运行,如此处所述)
How to set Apache Spark Executor memory 。所以我需要将 spark.driver.memory
参数增加到更大的值。
问题是我无法通过 sparklyr documentation 中描述的正常方法设置此参数。 (即通过 spark_config()
、config.yml
文件或 spark-defaults.conf
文件):
in local mode, by the time you run spark-submit, a JVM has already been launched with the default memory settings, so setting "spark.driver.memory" in your conf won't actually do anything for you. Instead, you need to run spark-submit as follows:
bin/spark-submit --driver-memory 2g --class your.class.here app.jar
(来自 How to set Apache Spark Executor memory )。
我认为我可以通过将 sparklyr.shell.driver-memory
选项添加到 config.yml< 来复制上面的
;如 Sparklyr 文档中所述; bin/spark-submit
命令sparklyr.shell*
选项是传递给 spark-submit
的命令行参数,即将 sparklyr.shell.driver-memory: 5G
添加到config.yml
文件应等效于运行 bin/spark-submit --driver-memory 5G
。
我现在已经尝试了上述所有选项,但它们都没有更改 Spark 应用程序中的驱动程序内存(我通过查看 Spark UI 的“执行器”选项卡进行检查)。
那么当通过 Sparklyr 以本地模式运行 Spark 时,如何更改驱动程序内存?
最佳答案
感谢 @Aydin K 的建议。最终,我能够通过首先将 java 更新到 64 位(允许在 JVM 中使用 >4G RAM),然后使用 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)
关于java - 通过 Sparklyr 以本地模式运行 Spark 时,如何配置驱动程序内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44666503/