1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Apache Sparkのコンポーネントを整理する

Last updated at Posted at 2023-02-12

背景・目的

あらためて、Apache Sparkのアーキテクチャやコンポーネントを整理します。

概要

Components

image.png
出典:Apache Spark Cluster Mode Overview

Sparkで利用される用語は下記の通りです。

用語 意味
Application Spark上に構築されたユーザプログラム
Driver ProcessとExecutor Processで構成される。
Application jar ユーザのSparkアプリケーションを含んだjarファイル
Driver program main()関数を実行する。下記の役割を持つ。
・ SparkContextを作成する
・Sparkアプリケーションに関する情報管理
・ユーザプログラムや入力の応答
Executor全体のタスクの分析、分散、スケジューリングを行う。
Cluster manager リソースを取得するための外部プログラム(YARN、Mesos、k8s等)
物理マシンを制御し、Sparkアプリケーションにリソースをアサインする。
Deploy mode クラスターモードと、クライアントモードの2つがある。
・クラスタモードの場合、Driverプログラムはクラスタ内で起動される。
・クライアントモードの場合、Driverはクラスタ外から起動される。
Worker node クラスタ内でアプリケーションを実行できる任意のノード
Executor ワーカーノード上のアプリケーション用に起動されるプロセス。下記の役割がある。
・Driverから割り当てたタスクを実行し、タスク全体のメモリまたはディスクストレージにデータを保持する。
・Executorの計算の進捗をDriverにレポートする。
Task 1つのエグゼキュータに送信される作業の単位
Job Sparkアクション (保存、収集など) に応答して生成される複数のタスクで構成される並列計算。
Stage 各ジョブは、互いに依存するステージと呼ばれる小さなタスクのセットに分割される。 (MapReduce の map ステージと reduce ステージに近いイメージ)。

Application、Job、Stage、Taskの関係性

image.png

各Componentの解説

Driver

  • Driverは、作成するプログラムのmain()関数を実行するプロセス
  • このプロセスが実行するユーザコードが、SparkContextの生成、RDDの生成を行い、変換やアクションを実行する
  • ユーザプログラムのタスクへの変換を行う
    • Sparkドライバは、ユーザのプログラムを実行の単位(タスク)に変換する。
    • Sparkプログラムは、論理的なDAGを生成し、ドライバが実行されると、物理的な実行計画に変換する。
    • Sparkは、mapの変換を纏めてマージするためのパイプライン化のような最適化を行い、実行グラフを一連のステージ群に変換する。それぞれのステージには複数のタスクが含まれる。
    • タスクはSparkで最も小さな単位
  • エグゼキュータ上のタスクのスケジューリングを行う
    • 物理的な実行計画が決まった後、Sparkドライバは、Executor群の個々のタスクのスケジュールを調整する。
    • Executor群は、起動時に自分自身をドライバに対して登録することで、ドライバは自分のアプリケーションのExecutorの状況を常に把握できる。
    • 各Executorは、タスクを実行し、RDDのデータを保持する事ができるプロセス。
    • Sparkドライバは、その時点でのExecutor群を見て、データの配置に基づいて各タスクを適切な場所にスケジューリングしようとする。
      • キャッシュされていた場合も、そのデータにアクセスする将来のタスクのスケジューリングに、この情報を活用する。
    • ドライバは、Webインタフェイスを通じて実行中のSparkアプリに関する情報を公開する

Executor

  • Sparkジョブの個々のタスクの実行を受け持つワーカープロセス
  • ExecutorはSparkアプリケーションの起動時に1度起動されて、通常はそのアプリケーションが動作している間、動作し続ける。
  • アプリケーションを構成するタスク群を実行し、結果をドライバに返す。
  • ユーザプログラムによってキャッシュされるRDDをのためのインメモリストレージを各Executor内で動作するブロックマネージャーと呼ばれるサービスを通じて提供する。
    • RDDはExecutor内にキャッシュされるので、タスクはキャッシュされたデータと同居して動作することができる

Cluster Manager

  • ExecutorやDriverの起動をCluster Managerが担う。
  • SparkのCluster Managerはプラガブルな構成となっており、YARNやMesosなどが利用できる。

Hadoop YARN

  • 共有リソースプール上で様々なデータ処理フレームワークを動作させることができる。
  • YARNで動作させる場合に、Sparkのアプリケーションは決められた数のExecutorを使う。各種パラメータは下記の通り
設定項目 説明
--num-executors Executorの数
--executor-memory Executorが使用するメモリ
--executor-cors YARNに要求するコア数

Spark Application

  • Sparkアプリケーションの中核となるのは、Spark Driverとなる。
  • Spark DriverではSparkSessionを作成する

Spark Jobs

  • DriverはSparkアプリケーションを1つ以上のSparkジョブに変換する。
  • 次に各Spark ジョブをDAGに変換する。

Spark Stages

  • DAGノードの一部として、直列または並列に実行できる操作に基づいてステージが作成される。
  • すべての操作が1つのStageになるわけではなく、複数のStageで分割できる。

Spark Task

  • 各ステージは、Sparkタスクで構成され、各Spark Executor間でフェデレーションされる。
  • 各タスクは1つのコアにマップされる。
  • 16コアのExecutorでは、16個以上のタスクを16個以上のパーティションで並列で処理する。

実行時の流れ

Driver プログラムのSparkContextが調整(コントロール)する。ざっくりと下記の流れになる。

  1. SparkContextは、Cluster Managerにアクセスしてリソースを割り当てる。
  2. 接続後、クラスタ内のノードでExecutorを取得する。
  3. SparkContextから各Executorにアプリケーション(JarファイルやPythonファイル)を配布する。
  4. SparkContextはタスクを各Executorに送信する。

留意事項

  • Driverプログラムは、Executorからの通信をListenする必要があり、ワーカーノードからNWでアドレスを指定できる必要がある。
  • Driverプログラムは、Workerノードを制御するため可能な限り近くで実行することが推奨される。

考察

基本的なところは整理できたので、今後はSparkの特徴である遅延評価実行等やパラメータについて整理しようとおもいます。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?