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.

ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)

16,022 views

Published on

IBM Datapalooza Tokyo 2016(2016年6月15日)講演資料
『ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン』

日本Hadoopユーザー会 濱野 賢一朗(NTTデータ)

Published in: Technology
  • Be the first to comment

ちょっと理解に自信がないな という皆さまに贈るHadoop/Sparkのキホン (IBM Datapalooza Tokyo 2016講演資料)

  1. 1. ちょっと理解に自信がないな という皆さまに贈る Hadoop/Sparkのキホン 日本Hadoopユーザー会 濱野 賢一朗/Kenichiro Hamano (NTTデータ) 2016年6月15日 IBM Datapalooza Tokyo 2016 講演資料
  2. 2. 自己紹介 濱野 賢一朗 (はまの けんいちろう) – 日本Hadoopユーザー会のメンバとして、 イベント Hadoop / Spark Conference Japan や勉強会 Hadoopソースコード リーディングの企画・実施を担当 – 翔泳社 『Hadoop徹底入門』 監修者 – NTT DATA 技術革新統括本部 に所属 – Hadoop 関係者で話題になった 「経産省の報告書」 の実証事業のPM 平成21年度 産学連携ソフトウェア工学実践事業報告書 高信頼クラウド実現用ソフトウェア開発(分散制御処理技術等に係るデータセンター高信頼化に向けた実証事業) http: //www.meti.go.jp/policy/mono_info_service/joho/downloadfiles/2010software_research/clou_dist_software.pdf
  3. 3. まずは Hadoopって 何だっけ?
  4. 4. Hadoopを一言でいうと・・・ 並列分散処理を実現するミドルウェア 複数のIAサーバを束ねて、 ひとつの大きな処理システムとして利用 特に大量データの格納・処理に最適化 HDDは今でも実質は 80MB/sec 程度が限界 5TBのデータを読み込むのに 約 5*1000*1000 /80 = 62500秒 = 17.4時間 この問題を解決するために、並列分散処理を活用
  5. 5. 大量データの処理を実現するには データを複数のサーバに分割して格納 利用時には、複数のサーバから、 それぞれのデータを同時に読み込む  HDDの台数分だけのスループットを確保 1台だと 80MB/sec 程度でも 1000台だと 80GB/sec のスループット 5TBのデータを読み込みも 62.5 秒で実現
  6. 6. Hadoopの構成 (従来) 大きく 2つのコンポーネントで構成 分散ファイルシステム HDFS Hadoop Distributed File System 並列分散処理フレームワーク MapReduce Framework アルゴリズム MapReduce を実現する どちらも Google が 発表した論文 のアイデアを 元に開発 されている
  7. 7. Hadoopの構成 (従来)  集中管理型の分散システム  データ管理や 分散処理ジョブ の管理は マスタサーバが 実施  スレーブサーバは、 分散処理の 実行や データの実体を 保存 Hadoopマスタサーバ Hadoopクライアント L2/L3スイッチ NameNode JobTracker L2スイッチ Hadoopスレーブサーバ群 DataNode TaskTracker DataNode TaskTracker DataNode TaskTracker DataNode TaskTracker DataNode TaskTracker ディスク ディスク ディスク ディスク ディスク
  8. 8. 分散ファイルシステム HDFS NameNode (Master) DataNode (Slave) クライアント ②③ ① ① ① ファイル Heartbeat メタ情報 管理 ブロック 管理 DataNode 状態監視 ブロックの 保存 1つのブロックを複数のDataNodeで保存 → 任意のDataNodeが故障してもデータを失わない ブロック ① ③ ③ ③ ② ② ②
  9. 9. MapReduce (アルゴリズム) 大量の件数のデータがあった時に、 複数ワーカーで 並列に処理できる仕組み 例として、選挙の開票作業を想定 – 複数人で作業を分担して実施 – 最初に、投票用紙を分けて、 みんなで並行して投票者別に用紙を仕分ける – 次に、投票者別の用紙を1カ所にまとめて、 それぞれの枚数を数える
  10. 10. MapReduce (アルゴリズム) Aさん Bさん Cさん ①用紙を適当に3つに分ける ・・ ・ ・・ ・ ・・ ・ a氏 b氏 e氏 a氏 b氏 e氏 a氏 b氏 e氏 ②3人で並行して、 投票者別に用紙を 仕分ける 第1段階 第2段階 第3段階 ④3人で並行して、 投票者ごとに 枚数を数える a氏の 得票数 b氏の 得票数 d氏の 得票数 e氏の 得票数 c氏の 得票数 投票 結果 Aさん Bさん Cさん a氏 e氏 ③投票者ごと 用紙を集める d氏c氏b氏
  11. 11. MapReduce (アルゴリズム) ・・ ・ ・・ ・ ・・ ・ Aさん Bさん Cさん a氏 b氏 E氏 a氏 b氏 e氏 a氏 b氏 e氏 ①用紙を適当に3つに分ける ②3人で並行して、 投票者別に用紙を 仕分ける a氏 e氏 ③投票者ごと 用紙を集める ④3人で並行して、 投票者ごとに 枚数を数える a氏の 得票数 b氏の 得票数 d氏の 得票数 e氏の 得票数 c氏の 得票数 第1段階 第2段階 第3段階 投票 結果 Aさん Bさん Cさん d氏c氏b氏 Map処理 データを分類・仕分け Reduce処理 分類・仕分けされた データごとに処理
  12. 12. MapReduce (アルゴリズム) ・・ ・ ・・ ・ ・・ ・ Aさん Bさん Cさん a氏 b氏 E氏 a氏 b氏 e氏 a氏 b氏 e氏 ①用紙を適当に3つに分ける ②3人で並行して、 投票者別に用紙を 仕分ける a氏 e氏 ③投票者ごと 用紙を集める ④3人で並行して、 投票者ごとに 枚数を数える a氏の 得票数 b氏の 得票数 d氏の 得票数 e氏の 得票数 c氏の 得票数 第1段階 第2段階 第3段階 投票 結果 Aさん Bさん Cさん d氏c氏b氏 N人でやれば N倍のスピード (相互に影響を受けずに作業できる) N人でやれば 約N倍のスピード (相互に影響を受けずに作業できる)
  13. 13. MapReduce Framework JobTracker (MASTER) TaskTracker (SLAVE) クライアント ② ③ ① タスク実行中 タスク実行待ち タスク実行(競争)中 MapReduce ジョブ管理 タスク 管理 Heartbeat TaskTracker 状態監視 MapReduce ジョブ M R 同じ処理の投機的実行 データのローカリティを意識した タスクの実行 Map Map Reduce MR M RM Map,Reduce タスクの実行
  14. 14. Hadoopの特徴 HDFS  大量のデータを高スループットに読み込める  サーバが故障しても、データの安全性は担保 MapReduce  Map処理、Reduce処理のみを指定すれば (原則はJavaで処理を記述) あとはフレームワークが並列分散処理を実現  ノード数を増やせば、基本スケール  サーバが故障しても、ジョブは実行される
  15. 15. HDFS  大量のデータを高スループットに読み込める  サーバが故障しても、データの安全性は担保 MapReduce  Map処理、Reduce処理のみを指定すれば (原則はJavaで処理を記述) あとはフレームワークが並列分散処理  ノード数を増やせば、基本スケール  サーバが故障しても、ジョブは実行される Hadoopの特徴 並列分散処理の 面倒な部分を 解決してくれる ミドルウェア
  16. 16. Hadoopは何に利用できるのか? データ読み込みのスループットの最大化 → 全件データ (Big Data) 処理の実現  ユーザーごとの個別のフィードバックの実現 (ソーシャルなサービス、レコメンドなど) 並列分散処理によるバッチ処理の高速化 → データ件数の増大に対応
  17. 17. Hadoopの活用例  過去のアクセス履歴を格納・処理して、ユーザーごとの 嗜好(特徴量)を抽出、コンテンツ最適化やレコメンド  オンラインゲームなどのサービスにおいて、ユーザー行動 を分析して、解約低減やその効果の評価  金融商品の現在価値計算 (中間データが肥大化する シミュレーション)、利用者ごとのリスク計算  N:Nのデータの突き合わせが必要な名寄せ系処理  PL/SQL等で多件数の小容量データを繰り返し取得・ 処理していた処理の高速化 (並列処理に)  タービン、橋梁、自動車、航空機に付けたセンサーから のデータを格納・処理して故障検知、利用の効率化
  18. 18. 現状のHadoopでは YARN が導入 分散ファイルシステム HDFS バッチ処理 MapReduce 従来のHadoop 分散ファイルシステム HDFS バッチ処理 MapReduce2 現在のHadoop リソース制御 YARN 並列分散処理フレームワークからリソース制御の レイヤを切り出された
  19. 19. YARNを使いこなすと・・・ 分散ファイルシステム HDFS バッチ処理 MapReduce2 リソース制御 YARN ストリーム処理 Storm ・・・・・・ Spark  YARNにより単一クラスタ内に 複数の分散処理アーキテクチャが同居可能になる → 蓄積済みの大量データを移動することなく、 同一計算リソースで多様な処理を実現
  20. 20. Sparkとは
  21. 21. Apache Sparkをざっくり言うと MapReduceに限らず、DAG(有向非循環グラフ) 型で柔軟に並列分散処理を実行できるエンジン – DAG型エンジンは複数登場している join filter groupby map map SparkではRDD(Resilient Distributed Dataset)とい うデータ集合を単位に扱う 実際には複数マシンのメモ リ上に分散配置され、耐障 害性の機構も備わる ひとつのジョブ
  22. 22. 参考: RDDによる開発 RDDベースの処理の記述 – MapReduceに比べると簡便に記述できる – 配列やリストなどのコレクションのように扱える
  23. 23. Sparkの処理は高速!  HadoopではMapReduceの単位が1つのジョブ  反復処理や複雑な処理では、I/O量が多くなりすぎる M R Map処理 Reduce処理 M R M R ・・・ ジョブ HDFS IO IOIO IO ジョブ間のデータの受け渡しのたびに、HDFSへのI/Oが伴う
  24. 24. Sparkの処理は高速!  Sparkでは複雑な処理でも1つのジョブで定義でき、 中間データを都度出力する必要がないため、I/Oは ジョブの入出力だけに抑えられる RDD RDD RDDRDD RDD RDD Sparkジョブ HDFS 複雑な処理においてジョブが多段になることが少ないため、ジョブ間の データの受け渡しに伴うI/Oは最小限に抑えられる IO IO IO RDDの変換
  25. 25. 補足: キャッシュの活用  何度も利用するRDDは、複数のサーバのメモリに分割し てキャッシュできる  キャッシュを活用することで、同じデータを利用する場合 でも、都度データを読み込む必要がない RDDRDD ジョブA RDD HDFS RDD キャッシュ済みのRDD RDD RDD RDD ジョブB ジョブBはジョブAがキャッシュ したデータを利用できる キャッシュを利用できるので、 HDFSからのデータの読み込 みは発生しない
  26. 26. 補足: キャッシュの活用 キャッシュは反復処理でも有効に機能する RDD RDD RDD 前段の反復処理の結果を 入力とするジョブ キャッシュ済みのRDD 2回目の反復以降は、 キャッシュしたRDDを 処理すれば良い。HDFS 最初の反復のみ、 HDFSからデータ を読み出す
  27. 27. Sparkのエコシステム ジョブもSQLもストリーミングも機械学習も 同一のSparkプラットフォーム上で動作する – Hadoopもエコシステムは充実しているが、個々に開発 データソース(HDFSなど) • Scala/Java/Python で処理が記述できる • インタラクティブシェル が付属し、試行錯誤 も可能 http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf ストリーミング処理、機械 学習ライブラリ、グラフ 処理エンジン等が付属 分散処理エンジンを含む コア部分
  28. 28. Sparkの主要なエコシステム SparkSQL – JavaやScala内のアプリケーション内でSQLを組み込める Spark Streaming – マイクロバッチ処理によるストリーミングエンジン – 数秒~数分単位での流入するデータを(繰り返し)処理できる MLlib / ML pipelines – Spark用の機械学習ライブラリとツール群 – 機械学習では 別プロジェクトの Mahout もSparkに対応 GraphX – Spark用のグラフ処理エンジン
  29. 29. Sparkも 絶賛進化中 まもなく2.0がリリースされるが、これまでの マイナーリリースでも大きく進化を遂げてきている 1.1.0 Sort based shuffle Netty based block server Dynamic Resource Allocation 1.2.0 バージョン DataFrame 1.3.0 Visualization Tungsten 1.4.0 Unified Memory Management 1.6.0
  30. 30. 参考: DataFrame API による開発  Spark 1.3.0 より DataFrame API が利用可能  構造化されたデータの処理が簡潔に記述できる http://cdn.oreillystatic.com/en/assets/1/event/126/Apache%20Spark_%20What_s%20new_%20what_s%20coming%20Presentation.pdf DataFrame APIで 同様の処理を記述
  31. 31. 参考: DataFrame API による開発  Spark SQLのオプティマイザの恩恵が受けられる  オプティマイザによってJVMで動作する物理プランが生成 されるため、開発言語の違いによる著しい性能劣化は 起こらない http://www.slideshare.net/databricks/introducing-dataframes-in-spark-for-large-scale-data-science
  32. 32. Hadoop / Spark Conference Japan 2016のアンケート 本番環境で利用中 489人 35.6% 試しに動かしている 374人 27.2% 利用実績なし(利用予定あり) 218人 15.9% 利用実績なし(利用予定なし) 293人 21.3% 3か月未満 145人 16.0% 3か月以上6か月未満 69人 7.6% 6か月以上1年未満 85人 9.4% 1年以上3年未満 298人 33.0% 3年以上 307人 34.0% 本番環境で利用中 160人 11.7% 試しに動かしている 437人 31.8% 利用実績なし(利用予定あり) 348人 25.3% 利用実績なし(利用予定なし) 429人 31.2% 3か月未満 214人 34.4% 3か月以上6か月未満 93人 14.9% 6か月以上1年未満 127人 20.4% 1年以上3年未満 171人 27.4% 3年以上 18人 2.9% Hadoopの利用状況を教えてください Sparkの利用状況を教えてください Hadoop利用歴を教えてください Spark利用歴を教えてください 本番環境で利用中 試しに動かしている 実績なし(予定あり) 実績なし(予定なし)
  33. 33. まとめ Hadoopは大量データを並列分散で 格納・処理するための仕組み Sparkは、DAG型の並列分散処理を実現 より高速に動作 SQL、ストリーミング処理、機械学習、 グラフ処理も同一エンジンで動作 もっと具体的に知りたい という方は、 『Hadoop徹底入門 第2版』 (翔泳社) 『Apache Spark入門』 (翔泳社) をぜひ読んでみてください!
  34. 34. ご静聴ありがとうございました 日本Hadoopユーザー会の 活動への応援、 引き続きよろしくお願いします

×