当通过 Sparklyr 在本地模式下 运行 Spark 时,如何配置驱动程序内存?

How do I configure driver memory when running Spark in local mode via Sparklyr?

我正在使用 Sparklyr 在具有 244GB RAM 的虚拟机上以本地模式 运行 Spark 应用程序。在我的代码中,我使用 spark_read_csv() 从一个文件夹中读取约 50MB 的 csvs,然后从第二个文件夹中读取约 1.5GB 的 csvs。我的问题是应用程序在尝试读取第二个文件夹时抛出错误。

据我了解,问题是驱动程序 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 文件应该等同于 运行ning bin/spark-submit --driver-memory 5G .

我现在已经尝试了上述所有选项,其中 none 更改了 Spark 应用程序中的驱动程序内存(我通过查看 Spark 'Executors' 选项卡 UI).

那么,当 运行通过 Sparklyr 在本地模式下使用 Spark 时,如何更改驱动程序内存?

我遇到了和你一样的问题,我的 mavenized java 应用程序(本地 [*])在调整本地内存设置时没有运气。尝试了很多组合(spark-env.sh、spark-defaults.conf 等)..

因此我做了以下解决方法:

1) 将所需的内存大小参数添加到: /opt/spark/conf/spark-defaults.conf

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

2) 构建一个 jar(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 "out of memory" space 问题 :-) 此外,spark UI 现在在执行程序选项卡中显示正确的值。

感谢@Aydin K 的建议。最终我能够通过首先将 java 更新为 64 位(允许在 JVM 中使用 >4G RAM)然后使用 [=11 来配置驱动程序内存=] 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)