SparkUIの確認
ここまでコンソール画面でSparkのプログラミングを行ってきましたが、Sparkにどんな処理がどんな環境で実行されたのかを可視化する「SparkUI」というツールが用意されています。インタラクティブシェルを立ち上げたまま、ブラウザを立ち上げhttp://localhost:4040/を開くと、SparkUIに接続できます。
以下にSparkUIのイメージ画像を示します。

SparkUIでは実行されたJobの一覧や、JobごとのStageの情報、今キャッシュされているデータの一覧など、チューニングを行うために必要なデータが表示されます。
ここではSparkUIの紹介に留め、詳しいSparkUIの見方は以後の連載で見ていきます。
RDDとDAGの概要
ここまでSparkの概要を脇に置いて、Scala、Pythonを使った簡単な処理を行いましたが、RDDとDAGはSparkの重要な概念で以後の連載でも登場します。また、実運用時にチューニングを行う際にも概念を理解していた方が効果的なチューニングを実施可能です。
ここでは、RDDとDAGの概要について軽く説明しておきます。
用語の確認
Spark、特にRDD、DAGを理解する上で重要な用語をまとめます。
RDD(Resilient Distributed Dataset)
RDDは「イミュータブルな分散実行可能なコレクション」とよく説明されます。Sparkでのプログラミングは基本的にこのRDD、またはRDDを拡張したコレクションへの変換操作・アクション操作のいずれかになりますが、なかなか言葉だけだと理解しづらく、Sparkに入門する際につまづくポイントでもあります。
DAG(Directed Acyclic Grapn)
DAGは「有向非循環グラフ」の略です。SparkではRDDに対する処理(変換やアクション)をDAGとして保存します。こちらもRDDと同様に言葉だけだと理解しづらい部分です。遅延実行と併せてよく説明されます。
遅延実行と変換とアクション
Sparkでは変換処理の実行時にはDAGの記録のみが行われ、アクションが実行された際にDAGをたどって評価・処理が行われます。これをSparkでは遅延実行と呼びます。こちらもRDD、DAGが関わってくるため、言葉だけだと理解が難しいです。
CSVファイルの解析処理をもとにRDD、DAG、遅延実行を理解していく
先ほど処理したScalaのソースコードをもとにRDDとDAG、そして遅延実行の関係を見ていきます。
最初のRDDの作成
以下は最初のCSVの読み込み部分の処理です。

この時に作成される変数[raw]が RDDです。以下にDAGとRDDの概要を図に示します。

このコードを実行すると、「Diskに保存されたsample_transaction.csvを読み込んでRDDを作る」という依存関係を作成します。これをDAGと呼び、以後RDDに対する操作を記録していきます。
ここでは実際のデータの読み込みはまだ行われず、あくまで依存関係のみが記録されます。
filter処理とmap処理
次に作成したRDDをもとにfilterとmapの変換処理を行う部分です(head変数を作成する処理もありますが、ここでは無視して触れません)。

ここでは変数[raw]をもとに、変数[temp]を作成していますが、RDD[raw]に対して、2つの変換処理を行っています。
以下にDAGとRDDの概要を図に示します

RDDはイミュータブルな(値が後から変更されない)コレクションです。一度作成されたRDD[raw]が変更されることはなく、RDD[raw]から依存関係をもった新しいRDD[(filter)]がDAGに記録します。map処理を行った変数を作成するためにRDD[(filter)]から依存関係を持ったRDD[temp]をDAGに記録します。ここでも実際のデータ処理は行われません。
このように、filterやmapなど、RDDになんらかの処理を行い新たなRDDを作る処理をSparkでは変換処理と呼びます。
【PR】

