0

基本的に、いくつかの単純なjsonファイルを読み取り、それらを1つのフィールドで分割されたorcファイルとして書き込もうとするpython sparkジョブがあります。一部のキーは非常に大きく、他のキーは非常に小さいため、パーティションはあまりバランスが取れていません。

次のようなことをすると、メモリの問題が発生しました。

events.write.mode('append').partitionBy("type").save("s3n://mybucket/tofolder"), format="orc")

エグゼキュータにメモリを追加しても効果がないように見えましたが、ドライバのメモリを増やして解決しました。これは、すべてのデータがドライバーに送信されて書き込まれるということですか? 各エグゼキュータは独自のパーティションを書き込むことはできませんか? Spark 2.0.1を使用しています

4

1 に答える 1

0

データセットを分割してストレージに書き込んでも、レコードがドライバーに送信される可能性はありません。失敗の正確な理由を把握するには、メモリの問題のログ (ドライバーまたはエグゼキューターで発生した場合) を確認する必要があります。

writeおそらく、以前の計算のために、ドライバのメモリが少なすぎてこれを処理できません。古いジョブとステージのメタデータのメモリを減らして節約してみてくださいspark.ui.retainedJobsspark.ui.retainedStagesこれで問題が解決しない場合は、ドライバーに接続してjvisualvmジョブ/ステージを見つけ、大きなヒープ フラグメントを消費して最適化を試みます。

于 2016-11-17T07:02:14.683 に答える