sparklyr 中堆空间不足,但内存充足

问题描述 投票:0回答:2

即使在相当小的数据集上,我也会遇到堆空间错误。我可以确定我没有耗尽系统内存。例如,考虑一个包含大约 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()

我尝试了这个建议来增加 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 本地实例?)我仍然遇到堆空间错误,并且我再次没有使用太多系统内存。

r apache-spark dplyr sparklyr
2个回答
4
投票

在研究 Sandeep 的建议时,我开始深入研究

sparklyr
部署说明。这些提到驱动程序在此阶段可能会耗尽内存,并需要调整一些设置来纠正它。

这些设置并没有解决问题,至少最初没有。然而,将问题隔离到

collect
阶段让我能够在SO上使用SparkR找到类似问题

这些答案部分取决于环境变量的设置

SPARK_MEM
。把它们放在一起,我让它工作如下:

library(tidyverse)
library(sparklyr)

# Set memory allocation for whole local Spark instance
Sys.setenv("SPARK_MEM" = "13g")

# Set driver and executor memory allocations
config <- spark_config()
config$spark.driver.memory <- "4G"
config$spark.executor.memory <- "1G"

# Connect to Spark instance
sc <- spark_connect(master = "local")

# Load data into Spark
df_tbl <- copy_to(sc, df)

# Summarise data
uniques <- df_tbl %>%
  group_by(my_key) %>%
  summarise() %>%
  ungroup() %>%
  collect()

0
投票

我在 java heap oom 上遇到了类似的问题,这对我有用:

config <- spark_config()
config$`sparklyr.shell.driver-memory` <- '16G'
config$`sparklyr.shell.executor-memory` <- '16G'
config$`sparklyr.verbose` <- TRUE

sc <- spark_connect(master = "local", log = "console", config = config)
© www.soinside.com 2019 - 2024. All rights reserved.