スパークのバージョン、入力形式(テキスト、寄木細工、orc)、圧縮などの情報は確かに役に立ちます。
しかし要約すると、以下は一般的に親指ルールです。
- num-executors - これは、クラスタ全体がこのジョブに費やすエグゼキュータの総数です。 Executorには、1つ以上のタスクを含めることができます。 1つのノード= 1つのエグゼキュータと考える傾向があります。ノードごとに複数のエグゼキュータを持つ方がよいでしょう。これについては後ほど答えてください。
- executor-cores - これは、エグゼキュータごとのコア(タスク)の合計数です。あなたの場合、開始点はエグゼキュータごとに4コアです(ノードごとに)。
- executor-memory - エグゼキュータごとの合計メモリ。これは、エグゼキュータ内のすべてのタスクまたはコアで共有されます。
ほとんどの構成(あまり有効) NUM-執行= 7、エグゼキュータ・コアこの場合= 4、エグゼキュータ・メモリ= 8グラム 一のエグゼキュータは4つのタスクで共有されています。そのうちの1つが失敗した場合、エグゼキュータ全体が失敗とマークされます。
ベター構成 NUM-エグゼキュータ= 14(ノードあたり2)、エグゼキュータ・コアは= 2(2キュータ当たり)、エグゼキュータ・メモリ= 3G(プロセスの残りの2グラムを残しキュータ当たり3グラム)
この場合、エグゼキュータの起動時間が長すぎる可能性があるため、エグゼキュータごとに1つのコアもうまくいかないことに注意してください。
この場合、実行者全体を強制終了させないようにリソースを分割しています。
パラレル化 これは入力データのフォーマットによって異なります。