2016-12-29 17 views
1

かなり小さいデータセットでもヒープスペースエラーが発生しています。私はシステムメモリを使い果たしていないことを確信できます。たとえば、約20Mの行と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() 

は最後に、サンディープさんのコメントごとに、私は4GからMaxHeapSizeを下げてみました。 (仮想ワーカー一人につきMaxHeapSizeかSparkのローカルインスタンス全体ですか?)まだヒープスペースエラーがあり、システムのメモリをあまり使用しませんでした。

+2

は、MaxHeapSize = 4GB' 'に' MaxHeapSize = 24G'を減らす:すべて一緒にそれを置く、私は次のようにそれが動作するようになりました。 24 GBのメモリは必要ありません。これでも4GBでも十分です。 –

+0

ありがとうございます。それでもエラーは発生します。私はこれに対処する質問のテキストを明確にした。 –

+0

このジョブを実行するために使用しているspark submitコマンドも投稿できますか? –

答えて

2

Sandeepの提案を見て、私はsparklyrdeployment notesに掘り下げ始めました。これらは、ドライバがこの段階でメモリ不足になる可能性があり、いくつかの設定を修正して修正する可能性があることを示しています。

これらの設定は、少なくとも最初は問題を解決しませんでした。しかし、問題をcollectステージに隔離すると、SparkRをSOで使用してsimilarproblemsを見つけることができました。

これらの回答は、環境変数SPARK_MEMの設定に一部依存しています。あなたが唯一の1ギガバイトのデータを持っているので

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() 
関連する問題