Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apache Sparkについて

4,547 views

Published on

株式会社ブレインパッドが行ったApache Sparkの検証作業に関する資料の一部(Apache Sparkの基本的な紹介)です。詳細は、ブレインパッド公式ブログ「Platinum Data Blog」をご覧ください。URL:http://blog.brainpad.co.jp/

Published in: Data & Analytics
  • Be the first to comment

Apache Sparkについて

  1. 1. Copyright © BrainPad Inc. All Rights Reserved. Apache Sparkについて 2015年5月15日
  2. 2. Copyright © BrainPad Inc. All Rights Reserved. 1. Sparkとは 2
  3. 3. Copyright © BrainPad Inc. All Rights Reserved. 公式ドキュメントによると、 Apache Spark is a fast and general-purpose cluster computing system. そのまま訳すと、「高速」と「多目的」を特徴とした分散処理システム。 MapReduceに比べて、10倍~100倍程度のパフォーマンスが出ると言われている。  略歴 – 2009年からUC Berkleyで開発が始められる。 – 2010年にオープンソース化。 – 2013年にASFに寄贈される。 – 2014年にApache Top-Level Projectに昇格。 現在(2015/5/1時点)での最新バージョンは1.3.1。実装言語はScalaで、 Scala,Java,Pythonで使用可能。 3 Sparkとは
  4. 4. Copyright © BrainPad Inc. All Rights Reserved.  インメモリによる処理 – SparkはMapReduceとは異なりオンメモリでデータ処理をするため、mapやfilterなど の処理ごとに毎回ディスクIOが発生することはない。  RDD – 各ノードに分散して処理されるデータコレクションの抽象表現。 – Sparkでは、RDDに対してmapやreduceなどの処理を実行する。 – HDFSへの出力など、実際にデータが必要になるまで処理は遅延される。アクションが 起こった時に、処理の流れをたどって実際にデータロードやmapなどの処理を行う。 – RDDをメモリ上にキャッシュできるので、効率的に繰り返し処理が可能。 4 高速?
  5. 5. Copyright © BrainPad Inc. All Rights Reserved. Sparkは、Spark Coreを中心としたいくつかのサブコンポーネントから成り立って いる。 例えば、 – Spark SQL(構造化データに対して、SQLを使ってアクセス) – Spark Streaming(Spark上でストリーミングデータを処理) – MLlib(Spark上で機械学習) – GraphX(グラフデータを処理) すべてSpark Coreをベースとしているため、コードの再利用や学習コストの低下、 メンテナンス容易性の向上が期待できる。 5 多目的?
  6. 6. Copyright © BrainPad Inc. All Rights Reserved. SparkはBDAS(Berkeley Data Analytics Stack)の一部。 BDASとは、AMPlabで開発されている一連のデータ処理ソフトウェアスタック。 最近よく名前を聞くMesosなんかもここに含まれている。 6 多目的?
  7. 7. Copyright © BrainPad Inc. All Rights Reserved. 2. RDD 7
  8. 8. Copyright © BrainPad Inc. All Rights Reserved. 各ノードに分散して保持されるデータコレクションオブジェクト。 Sparkでは、このRDDを通じてデータの処理フローを定義していく。 RDDは、以下の性質を持つ。  パーティションによる分散 – データは複数のパーティションに分けられ、それぞれがクラスタ上に分散して処理され る。  遅延実行 – countやsaveAsTextFileなど、特定の操作が実行されるタイミングまですべての処理が 遅延される。  障害耐性 – RDDはイミュータブルで、データの途中経過を逐一保持しない。 – データがロストした場合は、RDDを再計算することでデータを復旧する。 • ミュータブルなデータをオンメモリで保持する場合、更新のたびにレプリケーションを取る必 要があるが、この方法はネットワークへの負荷が重い。 8 RDDとは
  9. 9. Copyright © BrainPad Inc. All Rights Reserved. RDDを作り出す方法は2種類ある。 1. コレクションオブジェクトから作成する。 val data = Array(1, 2, 3, 4, 5) val distData = sc.parallelize(data) 2. 外部データソースから作成する。 val distFile = sc.textFile("data.txt") 9 RDDの作成方法
  10. 10. Copyright © BrainPad Inc. All Rights Reserved. 1. Transformation 既存のRDDから、変換処理などを通じて新しいRDDを作り出す処理。実行はActionが実行 されるまで遅延される。 例:map、filter、groupByKey 2. Action Driverにデータを戻したり、外部にデータを書き込んだりする処理。Actionが実行された タイミングで、それまで遅延されていた処理が実行される。 例:count、take、saveAsTextFile 10 RDDのインターフェース
  11. 11. Copyright © BrainPad Inc. All Rights Reserved.  RDDは主に以下のデータを保持する。 – 親RDDの参照 – 担当するパーティション • 例えばHDFSからファイルを読み込んでRDDを作った場合、そのファイルのブロックごとに パーティションが作られる。RDDは、このパーティションの集合と、それぞれのメタデータ (どこに配置されているかとか)を保持する。  Transformationごとに、新たなRDDオブジェクトが作成される。 11 RDDの構造 RDD RDD RDD transformationにより生成 transformationにより生成 参照を保持参照を保持
  12. 12. Copyright © BrainPad Inc. All Rights Reserved. // 1.HDFSからデータロード val lines = sc.textFile(“hdfs://…”) // 2.”target”という単語を含む行に絞込 val targetLines = lines.filter(_.contains(“target”)) // 3.先頭の単語を集める val firstWords = targetLines.map(_.split(“ “)(0)) // 4.HDFSに書き出す firstWords.saveAsTextFile(“hdfs://…”) 12 RDD処理イメージ 上記のような処理の場合、4のActionが実行されるまではどの処理も実行されない。
  13. 13. Copyright © BrainPad Inc. All Rights Reserved. // 前ページの処理続き firstWords.saveAsTextFile(“hdfs://…”) println(firstWords.count()) 13 RDDのキャッシュ 上記は、firstWordsに対してアクションが2度実行されている。Sparkは通常、アク ションの時にすべてを再計算するのでこのようなケースでは非効率となる。 そこで、キャッシュをする。 firstWords.cache() firstWords.saveAsTextFile(“hdfs://…”) println(firstWords.count()) firstWordsの途中経過が一旦メモリ上に保持され、続く2つのアクションはこの キャッシュを使うようになり効率的に。
  14. 14. Copyright © BrainPad Inc. All Rights Reserved. 14 RDDのキャッシュ filter map saveAsTextFileHDFS filter map countHDFS  キャッシュしない場合、全く同じ処理が2度行われる。 • HDFSからの読み込みも2回発生し、処理の間に読み込み対象が変 われば読み込む内容も変わる。 filter map saveAsTextFileHDFS count  キャッシュする場合、map処理までが省かれる。 cache
  15. 15. Copyright © BrainPad Inc. All Rights Reserved. 3. 実行モデルとスケジューリング 15
  16. 16. Copyright © BrainPad Inc. All Rights Reserved. 16 Sparkの実行モデル Driver Executor  Driver – ユーザープログラムをtaskに変換し、 executorに実行を命令する。 – Actionに伴いexecutorからデータを取得する。 – ユーザープログラムのmainメソッドを実行す るJVMプロセス。driverが終了すると、Spark アプリケーション自体が終了する。  Executor – driverから命令されたtaskを実行する。 – RDDのキャッシュを保持する。 – Spark起動時に起動されるJVMプロセス。 ※実際には、YARNやMesosなどのクラスタマネージャ上で動作 するので、それによって実行モデルは若干異なります。 Executor Executor
  17. 17. Copyright © BrainPad Inc. All Rights Reserved. 1. ユーザープログラムが、transformationを組み合わせてRDDの参照グラフを作 成する。 2. ユーザープログラムが、actionを実行する。 3. Driverが、RDDの参照グラフからStageのDAG(有向グラフ)を作成する。 – Stage • 複数のTaskの集合。 • Shuffle(後述)が必要となるポイントでStageを分ける。 • 同じパーティションに対する処理が連続している場合、マージすることで最適化する。 – Task • executorの実行する処理の最小単位。1パーティションごとに作成される。 4. Executorに各Stageの処理を命令する。 17 Driverによる実行計画作成
  18. 18. Copyright © BrainPad Inc. All Rights Reserved.  Shuffle – reduceByKey等により複数のパーティションを1つにまとめるため、データをある executorから別のexecutorに転送する処理。 – 処理がローカルで済まなくなるため、パフォーマンス上のボトルネックになりやすい。 18 Shuffle RDD RDD RDD RDD RDD RDD RDD RDD RDD RDD RDD RDD 同じパーティションに閉じた処理ならシャッフルは 不要(mapなど) 別パーティションが必要になる処理では、 シャッフルが生じる。
  19. 19. Copyright © BrainPad Inc. All Rights Reserved.  Stageは、Shuffleを境界として分断 される。 – このケースではjoinがShuffleを起こし ている。  同じパーティションに対する処理が連 続する場合、処理は1つのステージに マージされる。(※) – Stage1はmapとfilterの2つの処理があ るが、実際にはmapとfilterを合成した 1つのStageに変換されている。 – これは“pipelining”と呼ばれる。 – Stageは複数のtaskで構成されており、 それぞれがexecutorで処理される。 ※厳密には、親RDDが1つの子RDDからのみし か参照されていない場合。(複数パーティション をマージするunionもこれに該当する) 19 Stageの分割例 map filter map join Stage1 Stage2 Stage3
  20. 20. Copyright © BrainPad Inc. All Rights Reserved. 4. その他の主要なSparkコンポーネント 20
  21. 21. Copyright © BrainPad Inc. All Rights Reserved.  Sparkで、ストリーミング処理を行うためのコンポーネント。  データは、一定間隔ごとにRDDとしてまとめられて処理される。 – このRDDのまとまりをDStreamと呼ぶ。 – Spark Streamingは一定間隔ごとにまとめられたRDDに対して処理を書くことになる ので、書き方は通常のSparkプログラミングとほぼ変わらない。(マイクロバッチ) 21 Spark Streaming ストリーミングデータ RDD RDD RDD 5秒 例:5秒間隔ごとにストリーミングデータを処理する場合 5秒 5秒 DSteam
  22. 22. Copyright © BrainPad Inc. All Rights Reserved.  Spark SQL – 構造化されたRDD(SchemaRDD)に対してSQLで処理を記述するためのコンポーネ ント。 – JSONやParquet、Hiveなどの様々なデータソースに対応。  DataFrame – RやPandas(Python)ライクなデータ操作が可能なコンポーネント。 – Spark1.3で追加された。  Catalyst – Spark SQLやDataFrameのコードを最適化するオプティマイザ(内部的に使用されて いる)。 – 詳細についてはdatabricksのブログを参考。 • https://databricks.com/blog/2015/04/13/deep-dive-into-spark-sqls-catalyst- optimizer.html 22 Spark SQL、DataFrame
  23. 23. Copyright © BrainPad Inc. All Rights Reserved.  Sparkで機械学習を行うためのコンポーネント  用意されているアルゴリズム例 – SVM – ロジスティック回帰 – 決定木 – K-means – ALS – などなど。  Spark Streamingと組み合わせて使うオンライン学習機もあり。 – Streaming K-meansとか。 23 MLlib
  24. 24. Copyright © BrainPad Inc. All Rights Reserved. 5. まとめ 24
  25. 25. Copyright © BrainPad Inc. All Rights Reserved.  Sparkは、インメモリ処理による高速化と、Spark Coreをベースとした多目的な コンポーネントを持つ分散処理ソフトウェア。  Scala,Java,PythonでSparkアプリケーションを記述可能。 – spark shellで気軽に試せるのが良い。  Spark上で扱うデータはRDDとして抽象化され、処理は遅延実行される。  Spark StreamingやMLlibなど、様々なコンポーネントがあり、互いに組み合わ せて使えるためメンテナンス性が高く総合的な学習コストも低い。  Learning SparkやAdvanced Analytics with Sparkが発売されるなど、情報も 揃ってきた感じ。 – 日本語情報も最近は増えてきた雰囲気がある。 – 今年のStrataはSpark関連のセッションが非常に多かったという話も。 25 まとめ
  26. 26. Copyright © BrainPad Inc. All Rights Reserved.  Spark公式ドキュメント – https://spark.apache.org/docs/latest/index.html  Learning Spark – http://shop.oreilly.com/product/0636920028512.do  Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing – https://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf 26 参考
  27. 27. Copyright © BrainPad Inc. All Rights Reserved. 株式会社ブレインパッド 〒108-0071 東京都港区白金台3-2-10 白金台ビル3F TEL:03-6721-7001 FAX:03-6721-7010 info@brainpad.co.jp Copyright © BrainPad Inc. All Rights Reserved. www.brainpad.co.jp

×