最近、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を回避できると言われています。私は同じことをしましたが、機能していないようです。
構成パラメーターのロードを試した後、ヒープスペースを有効にするために変更する必要があるのは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アプリケーションを閉じて再実行します。このエラーは二度と発生しません。:)
pyspark
(brew
でインストール)でも同じ問題が発生しました。私の場合、/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
行を追加しました。