0

それぞれ 8 つの CPU コアと 30GB のメモリを持つ 5 つのモードがあります。5GB のデータセット 1 と 65GB のデータセット 2 があるので、それらを結合して s3 ファイル システムに保存し、次のパラメータを設定する必要があります。

--num-executors 4 --spark.driver.memory 8g --executor-cores 5 --executor-memory 27g  --conf spark.yarn.executor.memoryOverhead=824m

しかし、どこでも検索してさまざまなパラメーターを試しましたが、それでもメモリエラーが発生しています。GC オーバーヘッドの制限を超えました。

Javaコードでもこれを使用しました:

conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
conf.set("spark.kryo.registrator", AvgRegistrator.class.getName());
conf.set("spark.driver.maxResultSize", "5g");
conf.set("spark.broadcast.compress", "true");
conf.set("spark.shuffle.compress", "true"); 

スタックオーバーフローの解決策はありません。誰でもこの問題を解決するためのより良い解決策を教えてください。

Spark java.lang.OutOfMemoryError: Java heap space

そしていつか私はこれを得ています:

java.lang.OutOfMemoryError: GC overhead limit exceeded
4

1 に答える 1

1

並列処理のレベルを上げようとします (つまり、パーティションを小さなパーティションに分割します)。

基礎となるストレージに少数のパーティションしかない場合は、結合の前にデータを手動で再パーティション化する必要があります (たとえばrepartition()、データセットまたは RDD を呼び出すことによって)。さらに、spark.default.parallelismRDD を使用している場合は、プロパティを設定すると役立ちます。データセットを使用している場合はspark.sql.shuffle.partitions、各シャッフル操作後のパーティション数を定義するパラメーターを検討してください。

于 2016-11-30T16:40:41.347 に答える