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超入門 (Hadoop / Spark Conference Japan 2016 講演資料)

12,530 views

Published on

Hadoop / Spark Conference Japan 2016 (2016/02/08)

■Apache Spark超入門
猿田 浩輔 (NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス)

イベントページ
http://hadoop.apache.jp/hcj2016-program/

Published in: Technology

Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)

  1. 1. Copyright © 2015 NTT DATA Corporation NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス 猿田 浩輔 Apache Spark超入門 2016/02/08 Hadoop / Spark Conference Japan 2016
  2. 2. Copyright © 2015 NTT DATA Corporation 2 わたしのこと  氏名/所属  猿田 浩輔(さるた こうすけ)  基盤システム事業本部 OSSプロフェッショナルサービス  Apache Sparkコミッタ  何をしている人?  OSSを活用したR&Dやシステム開発、テクニカルサポートに携わっています  7年ほどHadoop関連のR&Dやシステム開発に関わってきました  Hadoopだけでは解決が難しい問題領域にアプローチするプロダクトとして、近年 Sparkにも手を出し始めました
  3. 3. Copyright © 2015 NTT DATA Corporation 3  Apache Sparkとは?  オープンソースの並列分散処理系  並列分散処理の面倒な部分は処理系が解決してくれる  障害時のリカバリ  タスクの分割やスケジューリング  etc Apache Sparkとは 大量のデータを たくさんのサーバを並べて 並列分散処理し、 現実的な時間(数分~数時間)で 目的の処理結果を得る
  4. 4. Copyright © 2015 NTT DATA Corporation 4  Apache Sparkとは?  オープンソースの並列分散処理系  並列分散処理の面倒な部分は処理系が解決してくれる  障害時のリカバリ  タスクの分割やスケジューリング  etc Apache Sparkとは 大量のデータを たくさんのサーバを並べて 並列分散処理し、 現実的な時間(数分~数時間)で 目的の処理結果を得る なぜSparkが生まれたのか?  オープンソースの並列分散処理系としては、 既にApache Hadoopが普及している  Hadoopの特徴をおさらいし、Sparkが生まれ た背景を紐解く
  5. 5. Copyright © 2015 NTT DATA Corporation 5 Apache Hadoopってどんなものだっけ?  コモディティなサーバを複数並べて分散処理  3つのコンポーネントで構成 分散ファイルシステム HDFS クラスタ管理基盤 YARN 並列分散処理フレームワーク MapReduceフレームワーク 大量のデータを 貯める機能を提供 貯めたデータを処理 する機能を提供 クラスタの計算リソース を管理する機能を提供
  6. 6. Copyright © 2015 NTT DATA Corporation 6 Apache Hadoopってどんなものだっけ?  コモディティなサーバを複数並べて分散処理  3つのコンポーネントで構成 分散ファイルシステム HDFS クラスタ管理基盤 YARN 並列分散処理フレームワーク MapReduceフレームワーク 大量のデータを 貯める機能を提供 貯めたデータを処理 する機能を提供 クラスタの計算リソース を管理する機能を提供
  7. 7. Copyright © 2015 NTT DATA Corporation 7  並列分散処理を簡単に実行してくれる仕組み  アプリ開発者はMap処理とReduce処理を実装する(原則Java)  実装されたMap処理とReduce処理を元にフレームワークが分散 処理する。障害発生時もリトライで処理が継続する。  基本的にサーバを増やせば処理性能はスケールアウトする MapReduceフレームワークとは Map処理 Reduce処理 Map処理とReduce処理で完結したジョブを形成する データの加工や フィルタリングなど データの集計や 結合など HDFS HDFSと組み合わせるこ とで、I/Oが分散され、高 スループットで処理可能 HDFS 処理結果処理対象のデータ
  8. 8. Copyright © 2015 NTT DATA Corporation 8 MapReduceフレームワークの課題  Hadoopが普及するにつれて、次のような場合の MapReduceフレームワークの処理効率が課題になってきた ① ジョブが多段に構成される場合 ② 複数のジョブで何度も同じデータを利用する場合 M R Map処理 Reduce処理 M R M R ・・・ ・・・ ・・・ ジョブ M R M R データの受け渡し
  9. 9. Copyright © 2015 NTT DATA Corporation 9 MapReduceフレームワークの課題  Hadoopが普及するにつれて、次のような場合の MapReduceフレームワークの処理効率が課題になってきた ① ジョブが多段に構成される場合 ② 複数のジョブで何度も同じデータを利用する場合 M R Map処理 Reduce処理 M R M R ・・・ ・・・ ・・・  反復処理 • 機械学習 • グラフ処理  複雑な業務処理  アドホックな分析処理  複雑な業務処理
  10. 10. Copyright © 2015 NTT DATA Corporation 10 ジョブが多段に構成される場合の課題  ジョブ間でのデータの受け渡しのために、都度HDFSへのI/Oが発生  HDFSへの都度のI/Oのレイテンシが、処理時間の大部分を占めること につながる M R Map処理 Reduce処理 M R M R ・・・ ジョブ HDFS IO IOIO IO ジョブ間のデータの受け渡しのたびに、HDFSへのI/Oが伴う
  11. 11. Copyright © 2015 NTT DATA Corporation 11 複数のジョブで何度も同じデータを利用する場合の課題 何度も利用するデータを効率的に扱う仕組みがないため、同じデータを利用する 場合に都度巨大なデータの読み出しのための待ち時間が発生する ・・・ ・・・ M R M R ・・・M R ・・・M R HDFS ジョブごとに大きな データの読み込みの 待ち時間がかかる
  12. 12. Copyright © 2015 NTT DATA Corporation 12  MapReduceフレームワークが苦手としていた、スループットとレイ テンシの両立が必要な領域にアプローチする  Hadoop同様、大量のIAサーバを束ねて大規模なデータに対して 分散処理を行う  RDDと呼ばれる部分故障への耐性を考慮した分散コレクションに対し、 典型的なデータ処理を繰り返して目的の結果を得る処理モデル  ジョブに含まれる処理が定型化されておらず、様々な処理を組み 合わせられる 改めてApache Sparkとは 最新安定バージョンは1.6.0。現在2.0.0のリリースに向けて開発中 RDD RDD RDDRDD ユーザ定義の 処理の流れ フォーマット変換 グルーピング フィルター 集計入力
  13. 13. Copyright © 2015 NTT DATA Corporation 13  複雑な処理を少ないジョブ数で実現できる RDD RDD RDDRDD RDD RDD Sparkジョブ 中間データを都度出力する必要がないため、 I/Oはジョブの入力と出力だけに抑えられる 高スループットと低レイテンシを両立する工夫 HDFS 複雑な処理においてジョブが多段になることが少ないため、 ジョブ間のデータの受け渡しに伴うI/Oは最小限に抑えられる IO IO IO RDDの加工
  14. 14. Copyright © 2015 NTT DATA Corporation 14  何度も利用するRDDは、複数のサーバのメモリに分割してキャッ シュできる 高スループットと低レイテンシを両立する工夫 RDDRDD ジョブA RDD HDFS RDD ジョブBはジョブAがキャッシュ したデータを利用できる RDD RDD RDD ジョブB キャッシュを活用することで、同じデータを利用する場合でも、 都度データを読み込む必要がない キャッシュ済みのRDD キャッシュを利用できるので、 HDFSからのデータの読み込 みは発生しない
  15. 15. Copyright © 2015 NTT DATA Corporation 15 高スループットと低レイテンシを両立する工夫  キャッシュは反復処理にも有効 RDD RDD RDD 前段の反復処理の結果を 入力とするジョブ キャッシュ済みのRDD 2回目の反復以降は、 キャッシュしたRDDを 処理すれば良い。HDFS 最初の反復のみ、 HDFSからデータ を読み出す
  16. 16. Copyright © 2015 NTT DATA Corporation 16 Sparkはインターフェイスも優れている  RDDに対する処理は、配列やリストなどのコレクションの ように記述できる  並列分散処理を強く意識しなくても処理が記述できる  Scala / Java / Python向けのAPIが提供されている  インタラクティブシェルが「試行錯誤」を加速する  都度のビルドが不要なため、ロジックの試作から効果の確 認のサイクルを高速化できる // 例 val rdd = sc.textFile(...) // HDFSなどのストレージから //ファイルの内容をRDDにロード rdd.filter(...).map(...).reduceByKey(...).saveAsText(...) フィルタして 加工して 集計して 結果を保存
  17. 17. Copyright © 2015 NTT DATA Corporation 17 データソース(HDFSなど) Sparkの全体像 • Scala/Java/Pythonで処 理が記述できる • インタラクティブシェルが 付属し、試行錯誤も可能 http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf 分散処理基盤を扱いや すくする便利なエコシス テムが付属している • YARNなどのクラスタ管理基盤と連係動作する • データソースの分散ファイルシステムにはHDFSも利用可能  従来MapReduceで実装していた処理をSparkにマイグレーションしやすい 分散処理エンジンを含むコア部分
  18. 18. Copyright © 2015 NTT DATA Corporation 18  SQLやHiveQLで分散処理を記述するためのライブラリ  RDDの上に成り立つスキーマ付きのテーブル状のデータ構造「DataFrame」 に対してSQL/HiveQLを発行することで分散処理を実現可能  SQLを使い慣れたデータ分析者担当者が分散処理の恩恵を受けられる Spark SQL
  19. 19. Copyright © 2015 NTT DATA Corporation 19  DataFrameに対するクエリから、オプティマイザによってRDDベー スの処理の物理プランが生成される  構造化データを扱いやすい  Parquet / ORC / CSV / JSON / テキスト / JDBC ...  データソースによってはフィルタ処理をデータソース側に移譲することで、 無駄なデータの読み込みを避けられる Spark SQL http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf オペレータの実行順 序の最適化など データソースの特性を 活用した最適化など
  20. 20. Copyright © 2015 NTT DATA Corporation 20 MLlib / ML Pipelines  機械学習を分散処理するためのライブラリ  レコメンデーション / 分類 / 予測などに最適  ポピュラーなアルゴリズムがカバーされている  バージョンアップのたびに、カバーされるアルゴリズムが 増えている (一例)
  21. 21. Copyright © 2015 NTT DATA Corporation 21 MLlib / ML Pipelines  昨今はML Pipelinesの開発が活発  学習/最適化アルゴリズムなどのパーツだけではなく、Scikit-Learnのような機 械学習全体のパイプラインをサポートするAPIが提供されている val tokenizer = new Tokenizer() .setInputCol("text") .setOutputCol("words") val hashingTF = new HashingTF() .setNumFeatures(1000) .setInputCol(tokenizer.getOutputCol) .setOutputCol("features") val lr = new LogisticRegression() .setMaxIter(10) .setRegParam(0.01) // パイプラインにトークン分割、ハッシュ化、処理とロジスティック回帰を設定 val pipeline = new Pipeline().setStages(Array(tokenizer, hashingTF, lr)) val model = pipeline.fit(trainingDataset) // モデルの当てはめ
  22. 22. Copyright © 2015 NTT DATA Corporation 22 Spark Streaming  小さなバッチ処理を繰り返してストリーミング処理を実現 http://spark.incubator.apache.org/docs/latest/streaming-programming-guide.html KafkaやFlumeな どから途切れな く流入するデータ を処理する 流入するデータを数10ミリ秒 - 数秒単位で区切った塊(バッチ) に対してマイクロバッチ処理を適用する処理を繰り返す。
  23. 23. Copyright © 2015 NTT DATA Corporation 23 イマドキのSpark
  24. 24. 24Copyright © 2015 NTT DATA Corporation フロントエンドとバックエンドの進化 [フロントエンド] RDDを中心とした処理系から、DataFrameを中 心とした処理系へ [バックエンド] CPU利用効率の改善 - Project Tungsten – イマドキのSpark
  25. 25. 25Copyright © 2015 NTT DATA Corporation フロントエンドとバックエンドの進化 [フロントエンド] RDDを中心とした処理系から、DataFrameを中 心とした処理系へ [バックエンド] CPU利用効率の改善 - Project Tungsten – イマドキのSpark - DataFrame中心の処理系へ-
  26. 26. 26Copyright © 2015 NTT DATA Corporation  ある程度の規模の処理をRDDベースの処理で組み立てると  見通しが悪い  人手での最適化が難しい  RDDベースの処理の場合、言語によってバックエンドの処理系が異なるため、 言語によってパフォーマンスが異なる RDDベースの処理の課題
  27. 27. Copyright © 2015 NTT DATA Corporation 27 DataFrame API  DataFrameに対してSQLを発行できるだけではなく、DataFrame APIと呼ばれるデータ処理用のAPIが提供されている  (Scala/Python/Java/R)  構造化されたデータの処理が簡潔に記述できる http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf DataFrame APIで 同様の処理を記述
  28. 28. Copyright © 2015 NTT DATA Corporation 28 DataFrame API  Spark SQLのオプティマイザの恩恵が受けられる  オプティマイザによってJVMで動作する物理プランが生成されるた め、開発言語の違いによる著しい性能劣化は起こらない http://www.slideshare.net/databricks/introducing-dataframes-in-spark-for-large-scale-data-science
  29. 29. Copyright © 2015 NTT DATA Corporation 29 2015年からのトレンド [フロントエンド] RDDを中心とした処理系から、DataFrameを中 心とした処理系への進化 [バックエンド] CPU利用効率の改善 - Project Tungsten - イマドキのSpark - Project Tungsten -
  30. 30. Copyright © 2015 NTT DATA Corporation 30 様々な要因により、ボトルネックのトレンドがCPUに  Spark自体のアーキテクチャの改良 I/O効率の良いシャッフルロジック(ソートベースシャッフル) ネットワーク越しにデータを転送する際のメモリコピー回数の削 減(Netty)  DataFrameをベースとした処理の最適化 I/Oの削減 処理の最適化  昨今のハードウェアトレンドの変化 SSDや高スループットのネットワークが安価になってきた 一方でCPUのクロック数は頭打ち
  31. 31. Copyright © 2015 NTT DATA Corporation 31 Project Tungsten  SparkのCPU利用効率を改善 ① 独自のメモリ管理 メモリ利用効率の向上 無駄な中間オブジェクト生成の回避 GCの削減 ② キャッシュアウェアなデータレイアウト メモリアクセスの待ち時間の削減 ③ コードの動的生成 条件分岐の削減 ボクシング / アンボクシングによるオブジェクト生成の削減 バーチャルメソッドコールの回数の削減
  32. 32. Copyright © 2015 NTT DATA Corporation 32 Project Tungsten Project Tungsten(SPARK-7075) 特に性能にセンシティブな部分の独自のメモリ管理 •メモリ利用効率の向上 •無駄な中間オブジェクト生成の回避 •GCの削減 キャッシュアウェアなデータレイアウト モダンなCPUを活用できるコードの動的生成 Project Tungstenについてより詳しい情 報は、以下のセッションで確認できます  Reynold Xin Deep Dive into Project Tungsten (C会場 15:15~)
  33. 33. Copyright © 2015 NTT DATA Corporation 33 まとめ  SparkはMapReduceフレームワークが苦手としていた、スループットとレイテン シの両立を狙った並列分散処理系  複雑な処理を実行する場合も中間データを都度HDFSに出力せず、I/Oのコスト を抑えられる  何度も利用するデータはキャッシュできる  Sparkはインターフェイスも優れている  配列やリストのようなコレクションのように処理を記述できる  インタラクティブシェルが試行錯誤を加速する  エコシステムが充実している  SQL / 機械学習 / ストリーム処理 / グラフ処理  現在はフロントエンドとバックエンドで進化が始まっている  DataFrameを中心とした処理系  Project TungstenによるCPU利用効率の改善
  34. 34. Copyright © 2015 NTT DATA Corporation 34 Hadoop/Sparkのことなら、NTTデータにお任せください お問い合わせ先: 株式会社NTTデータ 基盤システム事業本部 OSSプロフェッショナルサービス URL: http://oss.nttdata.co.jp/hadoop メール: hadoop@kits.nttdata.co.jp TEL: 050-5546-2496
  35. 35. Copyright © 2011 NTT DATA Corporation Copyright © 2015 NTT DATA Corporation

×