Yige

Yige

Build

Sparkの基本 - Sparkジョブの提出

Spark 基礎 - Spark 作業提出#

内容整理自:

  1. Spark アーキテクチャと作業実行フロー

Spark 作業提出フロー#

名詞概念#

  • Application: ユーザーが作成した Spark アプリケーションで、Driver 機能のコードとクラスタ内の複数のノードで実行される Executor コードを含む

  • Driver: Driver は上記の Application の main () 関数を実行し、Spark アプリケーションの実行環境を準備する SparkContext を作成する。Spark では、SparkContext が ClusterManager と通信し、リソースの取得、タスクの割り当て、監視などを行う。Executor 部分の実行が完了すると、Driver は SparkContext を閉じる。通常、SparkContext が Driver を代表する

  • Worker:クラスタ内で Application コードを実行できる任意のノードで、YARN の NodeManager ノードに似ている。Standalone モードでは、Slave ファイルで設定された Worker ノードを指し、Spark on Yarn モードでは NodeManager ノードを指す

  • Executor: Application が Worker ノード上で実行されるプロセスで、このプロセスは Task を実行し、データをメモリまたはディスクに保存する。各 Application には独立した Executor のグループがある

  • Cluster Manager:クラスタ上でリソースを取得する外部サービスを指し、現在は以下がある:

    1. Standalone:Spark のネイティブリソース管理で、Master がリソースの割り当てを担当する
    2. Hadoop Yarn:YARN の ResourceManager がリソースの割り当てを担当する

実行フロー#

二つのコア:DAGSchedulerTaskScheduler
image.png
詳細は: Spark 進階 - Spark スケジューリングシステム

Spark の三つの作業提出モード#

local モード#

  • local モードでは、いわゆるmaster+workerという概念はない
  • local モードは、ローカルプロセスを起動し、プロセス内で Spark クラスタの作業の実行をシミュレートすることに相当し、Spark 作業はプロセス内の一つまたは複数の executor スレッドに対応し、実行が開始され、作業のスケジューリングやタスクの割り当てが行われる

Standalone 提出モード#

standalone モードで提出するには、master を spark://master_ipに設定する必要がある。例えば、spark://192.168.75.101:7077

Standalone Client モード#

image.png

フローディスクリプション

  1. クライアントが起動した後、ユーザープログラムを直接実行し、Driver 関連の作業:DAGScheduler や BlockManagerMaster などを起動する。

  2. クライアントの Driver が Master に登録する。

  3. Master は Worker に Executor を起動させる。Worker は ExecutorRunner スレッドを作成し、ExecutorRunner は ExecutorBackend プロセスを起動する。

  4. ExecutorBackend が起動すると、Driver の SchedulerBackend に登録する。Driver の DAGScheduler は作業を解析し、対応する Stage を生成する。各 Stage に含まれる Task は TaskScheduler を通じて Executor に割り当てられる。

  5. すべての stage が完了すると作業が終了する

Standalone Cluster モード#

image.png

  1. クライアントが作業を master に提出する

  2. Master は Worker ノードの一つを選択して Driver を起動する。つまりSchedulerBackend。Worker は DriverRunner スレッドを作成し、DriverRunner は SchedulerBackend プロセスを起動する

  3. Master は残りの Worker に Executor を起動させる。つまりExecutorBackend。Worker は ExecutorRunner スレッドを作成し、ExecutorRunner は ExecutorBackend プロセスを起動する

  4. ExecutorBackend が起動すると、Driver の SchedulerBackend に登録する。SchedulerBackend プロセスには DAGScheduler が含まれ、ユーザープログラムに基づいて実行計画を生成し、実行をスケジュールする。各 stage の task は TaskScheduler に保存され、ExecutorBackend が SchedulerBackend に報告する際に TaskScheduler の task を ExecutorBackend に割り当てて実行する

Standalone Client と Standalone Cluster の違い#

  • client モードでは、どのマシンで spark-submit スクリプトを使用して application を提出するかに応じて、driver はそのマシンで起動する
  • cluster モードでは、driver は master プロセスを通じてランダムに特定の worker プロセスに割り当てられて起動する

Yarn 提出モード#

Yarn-Client モード#

image.png

  1. Spark Yarn Client が YARN のResourceManagerApplication Masterの起動を申請する

  2. ResourceManager はリクエストを受け取った後、クラスタ内で NodeManager を選択し、そのアプリケーションに最初の Container を割り当て、ApplicationMaster をその Container 内で起動するよう要求する。YARN-Cluster との違いは、この ApplicationMaster は SparkContext を実行せず、SparkContext と連絡を取り合いリソースを配分することだけである

  3. Client 内の SparkContext が初期化されると、ApplicationMaster と通信を確立し、ResourceManager に登録し、タスク情報に基づいて ResourceManager にリソース(Container)を申請する

  4. ApplicationMaster がリソース(すなわち Container)を取得すると、対応する NodeManager と通信し、取得した Container 内で CoarseGrainedExecutorBackend を起動するよう要求する。CoarseGrainedExecutorBackend が起動すると、Client 内の SparkContext に登録し、Task を申請する

  5. Client 内の SparkContext が Task を CoarseGrainedExecutorBackend に割り当て、CoarseGrainedExecutorBackend が Task を実行し、Driver に実行の状態と進捗を報告する

  6. アプリケーションの実行が完了すると、Client の SparkContext が ResourceManager に登録解除を申請し、自身を閉じる

YARN-Cluster モード#

image.png
YARN-Cluster モードでは、ユーザーが YARN にアプリケーションを提出すると、YARN は二つの段階でそのアプリケーションを実行する:

  • 第一段階は、Spark の Driver を YARN クラスタ内で ApplicationMaster として起動すること;
  • 第二段階は、ApplicationMaster がアプリケーションを作成し、ResourceManager にリソースを申請し、Executor を起動して Task を実行し、その実行プロセス全体を監視し、実行が完了するまで続ける

YARN-Client と YARN-Cluster の違い#

  • YARN-Clusterモードでは、Driver は AM(Application Master)内で実行され、YARN にリソースを申請し、作業の実行状況を監視する。ユーザーが作業を提出した後、Client を閉じることができ、作業は YARN 上で実行され続けるため、YARN-Cluster モードはインタラクティブな作業の実行には適していない

  • YARN-Clientモードでは、Application Master は YARN に Executor を要求するだけで、Client は要求された Container と通信してその作業をスケジュールする。つまり、Client は離れることができない。Driver は spark 作業を提出したクライアントマシン上で実行され、詳細なログ情報をリアルタイムで確認でき、エラーの追跡や排除が容易で、テストに使用される

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。