web-dev-qa-db-ja.com

PySpark:Java.lang.OutofMemoryError:Javaヒープスペース

最近、24個のCPUと32GBのRAMを搭載したサーバーでPySparkとIpythonを使用しています。 1台のマシンでのみ実行されます。私のプロセスでは、以下のコードにあるように、膨大な量のデータを収集します。

_train_dataRDD = (train.map(lambda x:getTagsAndText(x))
.filter(lambda x:x[-1]!=[])
.flatMap(lambda (x,text,tags): [(tag,(x,text)) for tag in tags])
.groupByKey()
.mapValues(list))
_

私がする時

_training_data =  train_dataRDD.collectAsMap()
_

OutOfMemoryエラーが発生します。 _Java heap Space_。また、このエラーの後、Javaとの接続が失われるため、Spark=に対して操作を実行できません。_Py4JNetworkError: Cannot connect to the Java server_が返されます。

ヒープスペースが小さいようです。どうすればより大きな制限に設定できますか?

[〜#〜] edit [〜#〜]

実行する前に試したこと:sc._conf.set('spark.executor.memory','32g').set('spark.driver.memory','32g').set('spark.driver.maxResultsSize','0')

ここでドキュメントに従ってsparkオプションを変更しました(ctrl-fを実行してspark.executor.extraJavaOptionsを検索する場合): http://spark.Apache.org/ docs/1.2.1/configuration.html

Spark.executor.memoryオプションを設定することでOOMを回避できると言われています。私は同じことをしましたが、機能していないようです。

30
pg2455

構成パラメーターのロードを試した後、ヒープスペースを有効にするために変更する必要があるのは1つだけであることがわかりました。つまり、spark.driver.memory

Sudo vim $SPARK_HOME/conf/spark-defaults.conf
#uncomment the spark.driver.memory and change it according to your use. I changed it to below
spark.driver.memory 15g
# press : and then wq! to exit vim editor

既存のsparkアプリケーションを閉じて再実行します。このエラーは二度と発生しません。:)

42
pg2455

pysparkbrewでインストール)でも同じ問題が発生しました。私の場合、/usr/local/Cellar/Apache-sparkパスにインストールされました。

私が持っていた唯一の設定ファイルはApache-spark/2.4.0/libexec/python//test_coverage/conf/spark-defaults.confにありました。

here 提案どおり、ファイルspark-defaults.confをパス/usr/local/Cellar/Apache-spark/2.4.0/libexec/conf/spark-defaults.confに作成し、それにspark.driver.memory 12g行を追加しました。

0
Francesco Boi