java - 通过 Sparklyr 以本地模式运行 Spark 时,如何配置驱动程序内存?

标签 java r apache-spark sparklyr

我正在使用 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< 来复制上面的 bin/spark-submit 命令;如 Sparklyr 文档中所述; 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/

相关文章:

scala - 具有特征的 Spark 2.0 数据集编码器

java - 无法运行 JFrame

java - 在 java 中链接异步调用的最优雅的解决方案?

java - 确定 JOIN 是否产生任何列

r - 在 R 中使用带有 'dictionary' 参数的 DocumentTermMatrix

r - 在 R 中,克里金法给出 "system is exactly singular"错误

python - PySpark session 中缺少 java.util.HashMap

java - 尝试将架构应用于 JSON 数据时,SPARK 数据帧返回 null

Java:如何使用 CMYK 图像?

r - 如何将具有二元结果比率的数据集转换为适合 R 中逻辑回归的数据集