More Related Content
Similar to Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料) (20)
More from NTT DATA OSS Professional Services (20)
Apache Spark超入門 (Hadoop / Spark Conference Japan 2016 講演資料)
- 1. Copyright © 2015 NTT DATA Corporation
NTTデータ 基盤システム事業本部
OSSプロフェッショナルサービス
猿田 浩輔
Apache Spark超入門
2016/02/08
Hadoop / Spark Conference Japan 2016
- 2. Copyright © 2015 NTT DATA Corporation 2
わたしのこと
氏名/所属
猿田 浩輔(さるた こうすけ)
基盤システム事業本部 OSSプロフェッショナルサービス
Apache Sparkコミッタ
何をしている人?
OSSを活用したR&Dやシステム開発、テクニカルサポートに携わっています
7年ほどHadoop関連のR&Dやシステム開発に関わってきました
Hadoopだけでは解決が難しい問題領域にアプローチするプロダクトとして、近年
Sparkにも手を出し始めました
- 3. Copyright © 2015 NTT DATA Corporation 3
Apache Sparkとは?
オープンソースの並列分散処理系
並列分散処理の面倒な部分は処理系が解決してくれる
障害時のリカバリ
タスクの分割やスケジューリング
etc
Apache Sparkとは
大量のデータを たくさんのサーバを並べて
並列分散処理し、
現実的な時間(数分~数時間)で
目的の処理結果を得る
- 4. Copyright © 2015 NTT DATA Corporation 4
Apache Sparkとは?
オープンソースの並列分散処理系
並列分散処理の面倒な部分は処理系が解決してくれる
障害時のリカバリ
タスクの分割やスケジューリング
etc
Apache Sparkとは
大量のデータを たくさんのサーバを並べて
並列分散処理し、
現実的な時間(数分~数時間)で
目的の処理結果を得る
なぜSparkが生まれたのか?
オープンソースの並列分散処理系としては、
既にApache Hadoopが普及している
Hadoopの特徴をおさらいし、Sparkが生まれ
た背景を紐解く
- 5. Copyright © 2015 NTT DATA Corporation 5
Apache Hadoopってどんなものだっけ?
コモディティなサーバを複数並べて分散処理
3つのコンポーネントで構成
分散ファイルシステム
HDFS
クラスタ管理基盤
YARN
並列分散処理フレームワーク
MapReduceフレームワーク
大量のデータを
貯める機能を提供
貯めたデータを処理
する機能を提供
クラスタの計算リソース
を管理する機能を提供
- 6. Copyright © 2015 NTT DATA Corporation 6
Apache Hadoopってどんなものだっけ?
コモディティなサーバを複数並べて分散処理
3つのコンポーネントで構成
分散ファイルシステム
HDFS
クラスタ管理基盤
YARN
並列分散処理フレームワーク
MapReduceフレームワーク
大量のデータを
貯める機能を提供
貯めたデータを処理
する機能を提供
クラスタの計算リソース
を管理する機能を提供
- 7. Copyright © 2015 NTT DATA Corporation 7
並列分散処理を簡単に実行してくれる仕組み
アプリ開発者はMap処理とReduce処理を実装する(原則Java)
実装されたMap処理とReduce処理を元にフレームワークが分散
処理する。障害発生時もリトライで処理が継続する。
基本的にサーバを増やせば処理性能はスケールアウトする
MapReduceフレームワークとは
Map処理 Reduce処理
Map処理とReduce処理で完結したジョブを形成する
データの加工や
フィルタリングなど
データの集計や
結合など
HDFS
HDFSと組み合わせるこ
とで、I/Oが分散され、高
スループットで処理可能
HDFS
処理結果処理対象のデータ
- 8. Copyright © 2015 NTT DATA Corporation 8
MapReduceフレームワークの課題
Hadoopが普及するにつれて、次のような場合の
MapReduceフレームワークの処理効率が課題になってきた
① ジョブが多段に構成される場合
② 複数のジョブで何度も同じデータを利用する場合
M R
Map処理 Reduce処理
M R M R ・・・
・・・
・・・
ジョブ
M R
M R
データの受け渡し
- 9. Copyright © 2015 NTT DATA Corporation 9
MapReduceフレームワークの課題
Hadoopが普及するにつれて、次のような場合の
MapReduceフレームワークの処理効率が課題になってきた
① ジョブが多段に構成される場合
② 複数のジョブで何度も同じデータを利用する場合
M R
Map処理 Reduce処理
M R M R ・・・
・・・
・・・
反復処理
• 機械学習
• グラフ処理
複雑な業務処理
アドホックな分析処理
複雑な業務処理
- 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. Copyright © 2015 NTT DATA Corporation 11
複数のジョブで何度も同じデータを利用する場合の課題
何度も利用するデータを効率的に扱う仕組みがないため、同じデータを利用する
場合に都度巨大なデータの読み出しのための待ち時間が発生する
・・・
・・・
M R
M R
・・・M R
・・・M R
HDFS
ジョブごとに大きな
データの読み込みの
待ち時間がかかる
- 12. Copyright © 2015 NTT DATA Corporation 12
MapReduceフレームワークが苦手としていた、スループットとレイ
テンシの両立が必要な領域にアプローチする
Hadoop同様、大量のIAサーバを束ねて大規模なデータに対して
分散処理を行う
RDDと呼ばれる部分故障への耐性を考慮した分散コレクションに対し、
典型的なデータ処理を繰り返して目的の結果を得る処理モデル
ジョブに含まれる処理が定型化されておらず、様々な処理を組み
合わせられる
改めてApache Sparkとは
最新安定バージョンは1.6.0。現在2.0.0のリリースに向けて開発中
RDD RDD RDDRDD
ユーザ定義の
処理の流れ
フォーマット変換 グルーピング フィルター 集計入力
- 13. Copyright © 2015 NTT DATA Corporation 13
複雑な処理を少ないジョブ数で実現できる
RDD RDD RDDRDD
RDD RDD
Sparkジョブ 中間データを都度出力する必要がないため、
I/Oはジョブの入力と出力だけに抑えられる
高スループットと低レイテンシを両立する工夫
HDFS
複雑な処理においてジョブが多段になることが少ないため、
ジョブ間のデータの受け渡しに伴うI/Oは最小限に抑えられる
IO
IO
IO
RDDの加工
- 14. Copyright © 2015 NTT DATA Corporation 14
何度も利用するRDDは、複数のサーバのメモリに分割してキャッ
シュできる
高スループットと低レイテンシを両立する工夫
RDDRDD
ジョブA
RDD
HDFS
RDD
ジョブBはジョブAがキャッシュ
したデータを利用できる
RDD RDD RDD
ジョブB
キャッシュを活用することで、同じデータを利用する場合でも、
都度データを読み込む必要がない
キャッシュ済みのRDD
キャッシュを利用できるので、
HDFSからのデータの読み込
みは発生しない
- 15. Copyright © 2015 NTT DATA Corporation 15
高スループットと低レイテンシを両立する工夫
キャッシュは反復処理にも有効
RDD RDD RDD
前段の反復処理の結果を
入力とするジョブ キャッシュ済みのRDD
2回目の反復以降は、
キャッシュしたRDDを
処理すれば良い。HDFS
最初の反復のみ、
HDFSからデータ
を読み出す
- 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. 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. Copyright © 2015 NTT DATA Corporation 18
SQLやHiveQLで分散処理を記述するためのライブラリ
RDDの上に成り立つスキーマ付きのテーブル状のデータ構造「DataFrame」
に対してSQL/HiveQLを発行することで分散処理を実現可能
SQLを使い慣れたデータ分析者担当者が分散処理の恩恵を受けられる
Spark SQL
- 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. Copyright © 2015 NTT DATA Corporation 20
MLlib / ML Pipelines
機械学習を分散処理するためのライブラリ
レコメンデーション / 分類 / 予測などに最適
ポピュラーなアルゴリズムがカバーされている
バージョンアップのたびに、カバーされるアルゴリズムが
増えている
(一例)
- 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. Copyright © 2015 NTT DATA Corporation 22
Spark Streaming
小さなバッチ処理を繰り返してストリーミング処理を実現
http://spark.incubator.apache.org/docs/latest/streaming-programming-guide.html
KafkaやFlumeな
どから途切れな
く流入するデータ
を処理する
流入するデータを数10ミリ秒 - 数秒単位で区切った塊(バッチ)
に対してマイクロバッチ処理を適用する処理を繰り返す。
- 24. 24Copyright © 2015 NTT DATA Corporation
フロントエンドとバックエンドの進化
[フロントエンド]
RDDを中心とした処理系から、DataFrameを中
心とした処理系へ
[バックエンド]
CPU利用効率の改善 - Project Tungsten –
イマドキのSpark
- 25. 25Copyright © 2015 NTT DATA Corporation
フロントエンドとバックエンドの進化
[フロントエンド]
RDDを中心とした処理系から、DataFrameを中
心とした処理系へ
[バックエンド]
CPU利用効率の改善 - Project Tungsten –
イマドキのSpark - DataFrame中心の処理系へ-
- 26. 26Copyright © 2015 NTT DATA Corporation
ある程度の規模の処理をRDDベースの処理で組み立てると
見通しが悪い
人手での最適化が難しい
RDDベースの処理の場合、言語によってバックエンドの処理系が異なるため、
言語によってパフォーマンスが異なる
RDDベースの処理の課題
- 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. 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. Copyright © 2015 NTT DATA Corporation 29
2015年からのトレンド
[フロントエンド]
RDDを中心とした処理系から、DataFrameを中
心とした処理系への進化
[バックエンド]
CPU利用効率の改善 - Project Tungsten -
イマドキのSpark - Project Tungsten -
- 30. Copyright © 2015 NTT DATA Corporation 30
様々な要因により、ボトルネックのトレンドがCPUに
Spark自体のアーキテクチャの改良
I/O効率の良いシャッフルロジック(ソートベースシャッフル)
ネットワーク越しにデータを転送する際のメモリコピー回数の削
減(Netty)
DataFrameをベースとした処理の最適化
I/Oの削減
処理の最適化
昨今のハードウェアトレンドの変化
SSDや高スループットのネットワークが安価になってきた
一方でCPUのクロック数は頭打ち
- 31. Copyright © 2015 NTT DATA Corporation 31
Project Tungsten
SparkのCPU利用効率を改善
① 独自のメモリ管理
メモリ利用効率の向上
無駄な中間オブジェクト生成の回避
GCの削減
② キャッシュアウェアなデータレイアウト
メモリアクセスの待ち時間の削減
③ コードの動的生成
条件分岐の削減
ボクシング / アンボクシングによるオブジェクト生成の削減
バーチャルメソッドコールの回数の削減
- 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. Copyright © 2015 NTT DATA Corporation 33
まとめ
SparkはMapReduceフレームワークが苦手としていた、スループットとレイテン
シの両立を狙った並列分散処理系
複雑な処理を実行する場合も中間データを都度HDFSに出力せず、I/Oのコスト
を抑えられる
何度も利用するデータはキャッシュできる
Sparkはインターフェイスも優れている
配列やリストのようなコレクションのように処理を記述できる
インタラクティブシェルが試行錯誤を加速する
エコシステムが充実している
SQL / 機械学習 / ストリーム処理 / グラフ処理
現在はフロントエンドとバックエンドで進化が始まっている
DataFrameを中心とした処理系
Project TungstenによるCPU利用効率の改善
- 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