对Apache Spark的组件进行整理
即背景和目标。
再整理一下Apache Spark的架构和组件。
简述
组件
以下是在Spark中使用的术语。
用語意味ApplicationSpark上に構築されたユーザプログラム
Driver ProcessとExecutor Processで構成される。Application jarユーザのSparkアプリケーションを含んだjarファイルDriver programmain()関数を実行する。下記の役割を持つ。
・ SparkContextを作成する
・Sparkアプリケーションに関する情報管理
・ユーザプログラムや入力の応答
Executor全体のタスクの分析、分散、スケジューリングを行う。Cluster managerリソースを取得するための外部プログラム(YARN、Mesos、k8s等)
物理マシンを制御し、Sparkアプリケーションにリソースをアサインする。Deploy modeクラスターモードと、クライアントモードの2つがある。
・クラスタモードの場合、Driverプログラムはクラスタ内で起動される。
・クライアントモードの場合、Driverはクラスタ外から起動される。Worker nodeクラスタ内でアプリケーションを実行できる任意のノードExecutorワーカーノード上のアプリケーション用に起動されるプロセス。下記の役割がある。
・Driverから割り当てたタスクを実行し、タスク全体のメモリまたはディスクストレージにデータを保持する。
・Executorの計算の進捗をDriverにレポートする。Task1つのエグゼキュータに送信される作業の単位JobSparkアクション (保存、収集など) に応答して生成される複数のタスクで構成される並列計算。Stage各ジョブは、互いに依存するステージと呼ばれる小さなタスクのセットに分割される。 (MapReduce の map ステージと reduce ステージに近いイメージ)。
Driver ProcessとExecutor Processで構成される。Application jarユーザのSparkアプリケーションを含んだjarファイルDriver programmain()関数を実行する。下記の役割を持つ。
・ SparkContextを作成する
・Sparkアプリケーションに関する情報管理
・ユーザプログラムや入力の応答
Executor全体のタスクの分析、分散、スケジューリングを行う。Cluster managerリソースを取得するための外部プログラム(YARN、Mesos、k8s等)
物理マシンを制御し、Sparkアプリケーションにリソースをアサインする。Deploy modeクラスターモードと、クライアントモードの2つがある。
・クラスタモードの場合、Driverプログラムはクラスタ内で起動される。
・クライアントモードの場合、Driverはクラスタ外から起動される。Worker nodeクラスタ内でアプリケーションを実行できる任意のノードExecutorワーカーノード上のアプリケーション用に起動されるプロセス。下記の役割がある。
・Driverから割り当てたタスクを実行し、タスク全体のメモリまたはディスクストレージにデータを保持する。
・Executorの計算の進捗をDriverにレポートする。Task1つのエグゼキュータに送信される作業の単位JobSparkアクション (保存、収集など) に応答して生成される複数のタスクで構成される並列計算。Stage各ジョブは、互いに依存するステージと呼ばれる小さなタスクのセットに分割される。 (MapReduce の map ステージと reduce ステージに近いイメージ)。
申请、工作、阶段、任务之间的关系
每个组件的说明
司机
-
- Driverは、作成するプログラムのmain()関数を実行するプロセス
-
- このプロセスが実行するユーザコードが、SparkContextの生成、RDDの生成を行い、変換やアクションを実行する
-
- ユーザプログラムのタスクへの変換を行う
Sparkドライバは、ユーザのプログラムを実行の単位(タスク)に変換する。
Sparkプログラムは、論理的なDAGを生成し、ドライバが実行されると、物理的な実行計画に変換する。
Sparkは、mapの変換を纏めてマージするためのパイプライン化のような最適化を行い、実行グラフを一連のステージ群に変換する。それぞれのステージには複数のタスクが含まれる。
タスクはSparkで最も小さな単位
エグゼキュータ上のタスクのスケジューリングを行う
物理的な実行計画が決まった後、Sparkドライバは、Executor群の個々のタスクのスケジュールを調整する。
Executor群は、起動時に自分自身をドライバに対して登録することで、ドライバは自分のアプリケーションのExecutorの状況を常に把握できる。
各Executorは、タスクを実行し、RDDのデータを保持する事ができるプロセス。
Sparkドライバは、その時点でのExecutor群を見て、データの配置に基づいて各タスクを適切な場所にスケジューリングしようとする。
キャッシュされていた場合も、そのデータにアクセスする将来のタスクのスケジューリングに、この情報を活用する。
ドライバは、Webインタフェイスを通じて実行中のSparkアプリに関する情報を公開する
执行者。
-
- Sparkジョブの個々のタスクの実行を受け持つワーカープロセス
-
- ExecutorはSparkアプリケーションの起動時に1度起動されて、通常はそのアプリケーションが動作している間、動作し続ける。
-
- アプリケーションを構成するタスク群を実行し、結果をドライバに返す。
-
- ユーザプログラムによってキャッシュされるRDDをのためのインメモリストレージを各Executor内で動作するブロックマネージャーと呼ばれるサービスを通じて提供する。
RDDはExecutor内にキャッシュされるので、タスクはキャッシュされたデータと同居して動作することができる
集群经理
-
- ExecutorやDriverの起動をCluster Managerが担う。
- SparkのCluster Managerはプラガブルな構成となっており、YARNやMesosなどが利用できる。
Hadoop YARN 分布式系统
-
- 共有リソースプール上で様々なデータ処理フレームワークを動作させることができる。
- YARNで動作させる場合に、Sparkのアプリケーションは決められた数のExecutorを使う。各種パラメータは下記の通り
設定項目説明–num-executorsExecutorの数–executor-memoryExecutorが使用するメモリ–executor-corsYARNに要求するコア数
Spark应用程序
-
- Sparkアプリケーションの中核となるのは、Spark Driverとなる。
- Spark DriverではSparkSessionを作成する
Spark 工作
-
- DriverはSparkアプリケーションを1つ以上のSparkジョブに変換する。
- 次に各Spark ジョブをDAGに変換する。
火花阶段
-
- DAGノードの一部として、直列または並列に実行できる操作に基づいてステージが作成される。
- すべての操作が1つのStageになるわけではなく、複数のStageで分割できる。
火花任务
-
- 各ステージは、Sparkタスクで構成され、各Spark Executor間でフェデレーションされる。
-
- 各タスクは1つのコアにマップされる。
- 16コアのExecutorでは、16個以上のタスクを16個以上のパーティションで並列で処理する。
执行时序
在驱动程序中,SparkContext程序进行调整和控制。大致流程如下。
-
- SparkContext通过访问Cluster Manager来分配资源。
-
- 连接后,在集群的节点上获取Executor。
-
- SparkContext将应用程序(Jar文件或Python文件)分发给每个Executor。
- SparkContext将任务发送给每个Executor。
请注意事项。
-
- Driverプログラムは、Executorからの通信をListenする必要があり、ワーカーノードからNWでアドレスを指定できる必要がある。
- Driverプログラムは、Workerノードを制御するため可能な限り近くで実行することが推奨される。
请考察
由于基本概念已经澄清,我计划将重点放在整理Spark特色中的延迟评估执行等特性和参数上。
请参考