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 mode では、どのマシンで spark-submit スクリプトを使用して application を提出するかに応じて、driver はそのマシンで起動する。
  • cluster mode では、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 作業を提出したクライアントマシン上で実行され、詳細なログ情報をリアルタイムで確認できるため、エラーの追跡や排除が容易で、テストに使用される。

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