はじめに: Sparkアプリケーションがクラスターに送信されて実行される場合、アプリケーションアーキテクチャは2つの部分で構成されます
- ドライバープログラム(リソースアプリケーションとジョブ実行のスケジューリング)
- エグゼキュータ(タスクタスクの実行とジョブでのデータのキャッシュ)、どちらもJVMプロセスプロセスです
1:ドライバープログラムを実行する場所は、-deploy-modeで指定できます。
クリア:ドライバーは、アプリケーションのmain()関数を実行し、SparkContextを作成して、アプリケーションのmain()関数を実行し、SparkContextを
作成するプロセスを指します。
-
client:アプリケーションを送信するクライアントでドライバーが実行されていることを示します(デフォルト)
-
cluster:ドライバーがクラスターで実行されていることを示します(スタンドアロン:Worker、YARN:NodeManager)
-
クラスターモードとクライアントモードの最も重要な違いは、ドライバープログラムが実行される場所です。
企業の実際の実稼働環境でクラスターを使用する
1.クライアントモード
- DeployModeはクライアントです。これは、アプリケーションドライバープログラムが送信アプリケーションクライアントのホストで実行されていることを意味します。
図:
クライアントモードテストpi:
SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode client \
--driver-memory 512m \
--executor-memory 512m \
--num-executors 1 \
--total-executor-cores 2 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.11-2.4.5.jar \
10
YarnのwebUIビューの結果:
2.実稼働環境用のクラスター(クラスター)モード
- DeployModeはクラスターです。これは、アプリケーションドライバープログラムがクラスタースレーブノードのマシンで実行されていることを意味します。
図:
Piテスト:
SPARK_HOME=/export/server/spark
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 512m \
--executor-memory 512m \
--num-executors 1 \
--total-executor-cores 2 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.11-2.4.5.jar \
10
糸的webUI:
タスクを入力して、ログの
概要を表示します。
クライアントモードとクラスターモードの最も重要な違いは次のとおりです。ドライバープログラムはどこで実行されていますか。
- クライアントモード:テスト中に使用され、開発の必要はありません
。1。ドライバーはクライアントで実行され、クラスターとの通信コストが高い
2.ドライバーの出力結果がクライアントに表示されることを理解してください。 - クラスターモード:実稼働環境でこのモードを使用します。1。
ドライバープログラムがYARNクラスターにあり、クラスターとの通信コストが低い
。2 。
ドライバーの出力結果をクライアントに表示できない。3。このモードでは、ドライバーはYarnによって管理されるApplicationMasterノードで実行されます。問題がある場合、yarnはApplicationMaster(ドライバー)を再起動します
3.2つのモードの詳細なフローチャート
クライアントモード:
クラスターモード:
付録: Sparkクラスターでの役割
- 1)ドライバー:これはJVMプロセスプロセスであり、作成されたSparkアプリケーションはドライバー上で実行され、ドライバープロセスによって実行されます。
- 2)マスター(ResourceManager):これはJVMプロセスプロセスであり、主にリソースのスケジューリングと割り当てを担当し、クラスターの監視とその他の責任を実行します。
- 3)ワーカー(NodeManager):これはJVMプロセスです。ワーカーはクラスター内のサーバー上で実行されます。主に2つの責任を負います。1つはRDDの1つまたはいくつかのパーティションを独自のメモリに格納することであり、もう1つは他のプロセスとスレッド(Executor)を開始して、RDDのパーティションで並列処理と計算を実行します。
- 4)エグゼキュータ:JVMプロセスです。複数のエグゼキュータをワーカー(NodeManager)で実行できます。エグゼキュータは、RDDの定義を実行する複数のスレッド(タスク)を開始することにより、RDDパーティションで並列計算を実行します。 map、flatMap、reduceなどのオペレーター操作。