【发布时间】:2017-05-14 01:15:21
【问题描述】:
即使是相当小的数据集,我也会遇到堆空间错误。我可以确定我没有用完系统内存。例如,考虑一个包含大约 20M 行和 9 列的数据集,它占用 1GB 磁盘空间。我正在使用 30gb 内存的 Google Compute 节点上使用它。
假设我在一个名为df 的数据框中有这些数据。以下工作正常,虽然有点慢:
library(tidyverse)
uniques <- search_raw_lt %>%
group_by(my_key) %>%
summarise() %>%
ungroup()
以下抛出java.lang.OutOfMemoryError: Java heap space。
library(tidyverse)
library(sparklyr)
sc <- spark_connect(master = "local")
df_tbl <- copy_to(sc, df)
unique_spark <- df_tbl %>%
group_by(my_key) %>%
summarise() %>%
ungroup() %>%
collect()
我尝试this suggestion 为 Spark 增加堆空间。问题仍然存在。在htop 上查看机器的状态,我发现总内存使用量从未超过 10gb。
library(tidyverse)
library(sparklyr)
config <- spark_config()
config[["sparklyr.shell.conf"]] <- "spark.driver.extraJavaOptions=-XX:MaxHeapSize=24G"
sc <- spark_connect(master = "local")
df_tbl <- copy_to(sc, df)
unique_spark <- df_tbl %>%
group_by(my_key) %>%
summarise() %>%
ungroup() %>%
collect()
最后,根据 Sandeep 的评论,我尝试将 MaxHeapSize 降低到 4G。 (MaxHeapSize 是每个虚拟工作者还是整个 Spark 本地实例?)我仍然遇到堆空间错误,而且我没有使用太多系统内存。
【问题讨论】:
-
将
MaxHeapSize=24G减少到MaxHeapSize=4GB,因为你只有1 GB 的数据。它不需要 24 GB 内存。即使是 4GB 也足够了。 -
谢谢;它仍然得到错误。我澄清了问题的文本以解决这个问题。
-
您能否发布您用来运行此作业的 spark 提交命令??
-
来自 spark 文档:
spark.driver.extraJavaOptions:- 传递给驱动程序的额外 JVM 选项字符串。例如,GC 设置或其他日志记录。注意:在客户端模式下,这个配置不能直接在你的应用程序中通过 SparkConf 设置,因为此时驱动程序 JVM 已经启动。相反,请通过--driver-java-options命令行选项或在您的默认属性文件中进行设置。你也是这样吗?? -
你知道如何从 sparklyr 获取 spark 提交吗?我可以获取日志,但不能获取提交到集群的实际作业。
标签: r apache-spark dplyr sparklyr