Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

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

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

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

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

  • Identifiez-vous pour voir les commentaires

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

×