2016-09-12 8 views
2

私のスパークジョブをに--num-executers=4でサブミットすると、スパークのUIで、4つのエグゼキュータがクラスタの4つのノードに割り当てられていることがわかります。私のスパークのアプリケーションでは、さまざまなステップでさまざまなHDFSの場所から入力を受け取ります。しかし割り当てられたエグゼキュータは実行中も同じままです。スパークはデータの確実性を保証しますか?

データローカリティのために何かを実行するかどうかは疑いがあります。入力データがどこにあるかにかかわらず、最初にノードが選択されるからです(少なくともHDFSの場合のみ)。

map reduceはある程度は知っています。

答えて

1

はい、あります。 SparkはHadoopのInputFormatとRecordReaderのインターフェースと、TextInputFormatのような適切な実装を使用しています。したがって、この場合のSparkの動作は、一般的なMapReduceと非常によく似ています。 Sparkドライバは、ファイルのブロック位置を取得し、データの局所性に関してエグゼキュータにタスクを割り当てます。

+0

マップでは、分割を計算した後、マーカスロットだけがローカリティチェックに基づいて決定されます。しかし、エグゼクティブは最初に静的に割り当てられ、読み込まれたhdfsが実行された後は、データの局所性チェックではなく、以前割り当てられたexecuters内​​で実行されます。 –

+1

しかし、ドライバはエグゼキュータにタスクを割り当てる方法を決定します。したがって、エグゼキュータは静的な方法で割り当てられますが、ドライバは特定のファイルブロックを処理するエグゼキュータを決定します。私。ファイルのブロックAを格納し、エグゼキュータE1がそこで実行しているノード1、ノード2 - ブロックB、エグゼキュータE2,3-C、E3があります。スパークドライバは、ブロックAの処理をエグゼキュータE1、B〜E2、C〜E3に割り当てるが、ブロックB〜E3は割り当てない。もちろん、可能な場合にのみこれを行います。ブロックが実行中のエグゼキュータがないノード4にある場合、データはネットワーク経由で転送されます。 – Zyoma

関連する問題