当通过 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)
我正在使用 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)