Spark 基礎 - 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
: クラスター上でリソースを取得する外部サービスを指し、現在は以下のものがある:- Standalone:Spark のネイティブリソース管理で、Master がリソースの割り当てを担当する。
- Hadoop Yarn:YARN の ResourceManager がリソースの割り当てを担当する。
実行プロセス#
二つのコア:DAGScheduler
とTaskScheduler
詳細は: 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 モード#
プロセスの説明
-
クライアントが起動した後、ユーザープログラムを直接実行し、Driver 関連の作業:DAGScheduler や BlockManagerMaster などを起動する。
-
クライアントの Driver が Master に登録する。
-
Master は Worker に Executor を起動させる。Worker は ExecutorRunner スレッドを作成し、ExecutorRunner は ExecutorBackend プロセスを起動する。
-
ExecutorBackend が起動すると、Driver の SchedulerBackend に登録する。Driver の DAGScheduler は作業を解析し、対応する Stage を生成する。各 Stage に含まれる Task は TaskScheduler を通じて Executor に割り当てられる。
-
すべての stage が完了すると作業が終了する。
Standalone Cluster モード#
-
クライアントが作業を master に提出する。
-
Master は Worker ノードの一つを選択して Driver を起動する。つまり、
SchedulerBackend
。Worker は DriverRunner スレッドを作成し、DriverRunner は SchedulerBackend プロセスを起動する。 -
Master は残りの Worker に Executor を起動させる。つまり、
ExecutorBackend
。Worker は ExecutorRunner スレッドを作成し、ExecutorRunner は ExecutorBackend プロセスを起動する。 -
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 モード#
-
Spark Yarn Client が YARN の
ResourceManager
にApplication Master
の起動を要求する。 -
ResourceManager がリクエストを受け取ると、クラスター内で NodeManager を選択し、そのアプリケーションに最初の Container を割り当て、ApplicationMaster をその Container 内で起動するよう要求する。YARN-Cluster との違いは、この ApplicationMaster が SparkContext を実行せず、SparkContext と連絡を取り合いリソースの配分を行うこと。
-
Client 内の SparkContext が初期化を完了すると、ApplicationMaster と通信を確立し、ResourceManager に登録し、タスク情報に基づいて ResourceManager にリソース(Container)を要求する。
-
ApplicationMaster がリソース(つまり Container)を取得すると、対応する NodeManager と通信し、取得した Container 内で CoarseGrainedExecutorBackend を起動するよう要求する。CoarseGrainedExecutorBackend が起動すると、Client 内の SparkContext に登録し、Task を要求する。
-
Client 内の SparkContext が Task を CoarseGrainedExecutorBackend に割り当て、CoarseGrainedExecutorBackend が Task を実行し、Driver に実行の状態と進捗を報告する。
-
アプリケーションの実行が完了すると、Client の SparkContext が ResourceManager に登録解除を要求し、自身を閉じる。
YARN-Cluster モード#
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 作業を提出したクライアントマシン上で実行され、詳細なログ情報をリアルタイムで確認できるため、エラーの追跡や排除が容易で、テストに使用される。