2016-12-29 1 views
1

상당히 작은 데이터 세트에서도 힙 공간 오류가 발생합니다. 나는 내가 시스템 메모리를 다 사용하고 있지 않다는 것을 확신 할 수있다. 예를 들어 약 20,000 개의 행과 9 개의 열을 포함하는 데이터 세트가 디스크에서 1GB를 차지한다고 가정 해보십시오. 30GB의 메모리가있는 Google Compute 노드에서 사용하고 있습니다.sparklyr에서 힙 공간이 부족하지만 충분한 메모리가 있습니다.

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을 시도했다. 문제가 지속됩니다. 기계의 상태를 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의 의견에 따라, 나는 4GMaxHeapSize을 낮추는 시도했다. (가상 작업자 당 또는 전체 Spark 로컬 인스턴스에 대해 MaxHeapSize입니까?) 여전히 힙 공간 오류가 있으며 다시 시스템의 메모리를 많이 사용하지 않았습니다.

+2

는 MaxHeapSize = 4GB''에'MaxHeapSize = 24G'을 감소 : 모두 함께 퍼팅, 나는 다음과 같이 작동있어. 24GB 메모리가 필요하지 않습니다. 심지어 4GB로 충분합니다. –

+0

감사합니다. 여전히 오류가 발생합니다. 나는이 문제를 다루기위한 질문의 텍스트를 분명히했다. –

+0

이 작업을 실행하는 데 사용중인 spark submit 명령을 게시 할 수 있습니까 ?? –

답변

2

Sandeep의 제안을 살펴본 결과, sparklyrdeployment notes으로 파고 들기 시작했습니다. 이것들은 운전자가이 단계에서 메모리를 다 써 버렸고, 그것을 정정하기 위해 일부 설정을 조정할 것을 언급합니다.

이러한 설정으로는 처음에는 문제가 해결되지 않았습니다. 그러나 문제를 collect 단계로 분리하면 SparkRo를 사용하여 similarproblems을 찾을 수있었습니다.

이러한 대답은 부분적으로 환경 변수 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() 
관련 문제