TL; DR:Spark=スタンドアロンクラスターでは、クライアントモードとクラスターデプロイモードの違いは何ですか?アプリケーションを実行するモードを設定しますか?
Spark 3台のマシンを備えたスタンドアロンクラスターがあり、そのすべてがSpark 1.6.1:
spark-submit
を使用してアプリケーションを実行するマスターマシンSpark Documentation から、私は読みました:
(...)スタンドアロンクラスタの場合、Sparkは現在2つのデプロイモードをサポートしています。クライアントモードでは、ドライバはアプリケーションを送信するクライアントと同じプロセスで起動されます。ただし、クラスタモードでは、 、ドライバーはクラスター内のいずれかのワーカープロセスから起動され、クライアントプロセスは、アプリケーションの終了を待たずにアプリケーションを送信する責任を果たすとすぐに終了します。
ただし、これを読んで実際の違いを理解していないため、さまざまな展開モードの長所と短所を理解できません。
さらに、start_submitを使用してアプリケーションを起動すると、プロパティspark.submit.deployMode
を「cluster」に設定しても、コンテキストのSpark UIは次のエントリを表示します。
したがって、実際の違いを確認するために両方のモードをテストすることはできません。とはいえ、私の質問は次のとおりです。
1)Spark Standaloneclient)展開モードとcluster展開モードの実際の違いは何ですか?それぞれを使用することの長所と短所は何ですか?
2)spark-submit
を使用して、アプリケーションを実行するものを選択するにはどうすればよいですか?
Sparkスタンドアロンクライアントデプロイモードとクラスターデプロイモードの実際の違いは何ですか?それぞれを使用することの長所と短所は何ですか?
クライアントモードとクラスターモードの違いを見てみましょう。
クライアント:
集まる:
--supervise
フラグを使用して、マスターノードからドライバープログラムを監視し、それが死んだ場合にリセットできます。どちらの方がよいですか?確かではありませんが、実際に実験して決定するのはあなたです。ここでは、これはより良い決定ではありません。前者と後者から物事を得ることができます。どちらがあなたのユースケースに適しているかを見るのはあなた次第です。
spark-submit
を使用して、アプリケーションを実行するものを選択する方法
実行するモードを選択する方法は、--deploy-mode
フラグを使用することです。 Spark Configuration ページから:
/bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
マスターノードにSSHを実行することにより、EMRでspark submitを実行します。オプション--deploy-mode clusterを提供している場合、次のことが起こります。
ただし、-deploy-modeクライアントの場合:
これらは私が今まで気づいた基本的なものです。
私も同じシナリオを持っています。ここでは、マスターノードはスタンドアロンのec2クラスターを使用しています。この設定では、クライアントモードが適切です。このドライバーでは、クラスターのクライアントとして機能するspark-submitプロセスで直接起動されます。アプリケーションの入力と出力はコンソールに接続されます。したがって、このモードはREPLを含むアプリケーションに特に適しています。
それ以外の場合、ワーカーマシンから遠く離れたマシンからアプリケーションを送信する場合は、クラスターモードを使用してネットワークレイテンシb/wドライバーおよびエグゼキューターを最小限に抑えることが非常に一般的です。