私のスパークジョブをに--num-executers=4
でサブミットすると、スパークのUIで、4つのエグゼキュータがクラスタの4つのノードに割り当てられていることがわかります。私のスパークのアプリケーションでは、さまざまなステップでさまざまなHDFSの場所から入力を受け取ります。しかし割り当てられたエグゼキュータは実行中も同じままです。スパークはデータの確実性を保証しますか?
データローカリティのために何かを実行するかどうかは疑いがあります。入力データがどこにあるかにかかわらず、最初にノードが選択されるからです(少なくともHDFSの場合のみ)。
map reduceはある程度は知っています。
マップでは、分割を計算した後、マーカスロットだけがローカリティチェックに基づいて決定されます。しかし、エグゼクティブは最初に静的に割り当てられ、読み込まれたhdfsが実行された後は、データの局所性チェックではなく、以前割り当てられたexecuters内で実行されます。 –
しかし、ドライバはエグゼキュータにタスクを割り当てる方法を決定します。したがって、エグゼキュータは静的な方法で割り当てられますが、ドライバは特定のファイルブロックを処理するエグゼキュータを決定します。私。ファイルのブロックAを格納し、エグゼキュータE1がそこで実行しているノード1、ノード2 - ブロックB、エグゼキュータE2,3-C、E3があります。スパークドライバは、ブロックAの処理をエグゼキュータE1、B〜E2、C〜E3に割り当てるが、ブロックB〜E3は割り当てない。もちろん、可能な場合にのみこれを行います。ブロックが実行中のエグゼキュータがないノード4にある場合、データはネットワーク経由で転送されます。 – Zyoma