SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ゼロからはじめるSparkアプリケーション入門

Sparkアプリケーションの基本と、はじめに押さえておきたい重要な概念

ゼロからはじめるSparkアプリケーション入門(1)


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】

次のページ
まとめ

この記事は参考になりましたか?

ゼロからはじめるSparkアプリケーション入門連載記事一覧
この記事の著者

田中 裕一(日本アイ・ビー・エム株式会社)(タナカ ユウイチ)

Web系・広告系企業にて、Hadoop/Spark/Kafka等Hadoopエコシステムを利用した広告システム(DMP)・行動分析基盤・レコメンド基盤の全体アーキテクチャ設計やプログラミング、最適化、行動解析を担当。Spark/Hadoopエコシステムを筆頭にOSSを組み合わせた大規模なアーキテクチ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9347 2016/07/04 13:54

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー