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.

第1回 ``Learning Spark'' 読書会 第1章 ``Introduction to Data Analysis with Spark''

1,562 views

Published on

2015/2/28開催の第1回 ``Learning Spark'' 読書会 第1章の資料です。
http://readlearningspark.connpass.com/event/11846/

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

第1回 ``Learning Spark'' 読書会 第1章 ``Introduction to Data Analysis with Spark''

  1. 1. 第 1 回 “Learning Spark” 読書会 Chap. 1: “Introduction to Data Analysis with Spark” – Sparkによるデータ分析への招待 – @data sciesotist 2015/2/28
  2. 2. 1 “This chapter provides...” • この章では、Apache Sparkとは何なのか? ということについて、全体像を紹介します • すでにApache Sparkと関連プロジェクトに ついてご存知ならば、読み飛ばして第2章に 進んでください ……だそうです。 いきなり読み飛ばしてもアレなので読みますが 1
  3. 3. 2 “What is Apache Spark?” (1) • 高速・汎用の分散処理プラットフォーム • 高速: MapReduceモデルを拡張し、 インタラクティブ処理や、ストリーム処理に 対応している • データ処理のたびに何時間も待たなくてよい • インメモリで高速な処理が可能 • MapReduce + ディスクより効率的 2
  4. 4. 3 “What is Apache Spark?” (2) • 汎用性: それぞれ専用の仕組みが使われていた さまざまな処理に対応 • バッチ処理、反復処理、 インタラクティブ処理、ストリーム処理 • それらを組み合わせた “データ分析パイプ ライン” を作れる • いろんなツールを使い分ける必要もなく、 管理が簡単 3
  5. 5. 4 “What is Apache Spark?” (3) • Python、Java、ScalaのシンプルなAPIと SQLへの対応、その他にも高機能な 組み込みライブラリが用意されている • 他のビッグデータ処理基盤とも統合可能で、 Hadoopクラスタ上でSparkを実行したり、 Cassandraを含むHadoopのデータソースに もアクセスできる 4
  6. 6. 5 “A Unified Stack” (1) • Sparkプロジェクトはいくつもの 密接に関連するコンポーネントから構成される • Spark Core: リソースのスケジューリング、 分散処理の割り当て、アプリケーションの モニタリングなどを担当 • コアの上でさまざまな用途 (SQL、機械学習) に特化したコンポーネントが動作する • コンポーネントは組み合わせて利用できる 5
  7. 7. 6 “A Unified Stack” (2) • 密接な連携のおかげで、コアの改良が上位の コンポーネントの性能改善につながる • 用途ごとにさまざまなシステムを個別に管理し なくてもよく、運用コストを低減できる • 新機能の検証・導入も容易 • 最大の利点は、異なる分析手法、使い方を 組み合わせた利用が容易であること 6
  8. 8. 7 “A Unified Stack” (3) • 例えば、ストリーム処理によって得られた リアルタイムデータを機械学習で分類する • 例えば、アナリストはSQLで非構造化データ を検索する、もう少しイケてるデータサイエン ティストはPythonシェルでアドホック分析を する、他の人は一般的なバッチ処理の結果を 見るなど、さまざまな使い方ができる • IT部門は “Spark” だけを運用すればよい 7
  9. 9. 8 “A Unified Stack” (4) Sparkの全体像 (SparkプロジェクトWebサイトより) ※本の図版とは多少異なります 8
  10. 10. 9 構成要素 (1) Spark Core • スケジューリング、メモリ管理、障害復旧、 ストレージとのやりとりなどを担当 • RDDs (Resilient Distributed Datasets) と いう概念とそれを扱うためのAPIを提供する • RDDsは “コレクション” で、複数のノードに またがって配置され、並列で処理できる 9
  11. 11. 10 構成要素 (2) Spark SQL • Hive (HQL) と同等の、SQLを用いて構造化 データを扱うためのパッケージ ■ Hive、Parquet、JSONなどに対応している ■ Python、Java、ScalaからRDDsに対してSQLを発行 するためのAPIを提供する ■ 単一のSparkアプリケーション中で、SQL操作と 複雑な分析を組み合わせられる ■ 以前はSharkというプロジェクトだった 10
  12. 12. 11 構成要素 (2) Spark SQL Spark SQLは既存のHiveなどと連携できる 既存のBIツールからビッグデータを検索できる 11
  13. 13. 12 構成要素 (3) Spark Streaming • ストリームデータ*1 を扱うためのパッケージ ■ RDDsと密接に連携したストリームデータ処理のための APIを提供する ■ インメモリ、オンディスク、ストリームデータを 扱うアプリケーション間でAPIの共通性が高いため、 学習やプログラムの改変が容易 *1 間断なく入力されるデータ。リアルタイムデータ 12
  14. 14. 13 構成要素 (3) Spark Streaming 標準機能を用いて、特別な記述なしに耐障害性が実現できる 13
  15. 15. 14 構成要素 (4) MLlib • 機械学習の機能を提供するパッケージ ■ 分類、回帰、クラスタリング、協調フィルタリング*2 の各アルゴリズムに対応 ■ 最急降下法*3 など、低レベルの関数も提供されている ■ クラスタへのスケールアップを意図して設計されている *2 いわゆるレコメンド *3 関数の最適化を行う手法の1つ……だそう 14
  16. 16. 15 構成要素 (4) MLlib ロジスティック回帰の実行速度をHadoopと比較した様子 15
  17. 17. 16 構成要素 (5) GraphX • グラフ*4 を扱うためのパッケージ • Spark CoreのRDDs APIを拡張し、任意の ノードとエッジを用いたグラフが扱える • ページランクや三角形の数のカウント*5 など 広く使われるアルゴリズムを実装している *4 数学のグラフ理論が扱う、データどうしのつながりを 「ノード」と「エッジ」で表現したもの *5 ソーシャルグラフの分析でよく使うらしい 16
  18. 18. 17 構成要素 (5) GraphX ノードとエッジからなるグラフをさまざまに分析可能 17
  19. 19. 18 構成要素 (6) クラスタ管理 • Sparkはサーバ単体での利用から数千台規模へ の拡張まで、高いスケーラビリティを意図し て設計されている • 高い拡張性を実現するために、Sparkは Hadoop YARN、Apache Mesos、自身の スタンドアロンスケジューラなどの クラスタマネージャ上で動作する • デフォルトはスタンドアロンスケジューラ 18
  20. 20. 19 “Who Uses Spark, and for What?” • Sparkは汎用のフレームワークなので、 さまざまな用途で利用されている • 大まかにはデータサイエンティストと エンジニアが主要なユーザ • もちろん1人の人が両方のスキルを持ち、両方 の立場を切り替えてデータ処理を行うことも多 いが、ここではそれぞれのグループにおける ユースケースを見ていく 19
  21. 21. 20 参考: 「データサイエンティスト」のスキルセット 出典: データサイエンティスト協会「データサイエンティストに求められるスキルセット」 http://prtimes.jp/main/html/rd/p/000000005.000007312.html 20
  22. 22. 21 “Data Science Tasks” (1) • 流行りの言葉で明確な定義はない • 一般に、データを分析し、モデル化すること • SQL、統計学、機械学習などへの理解、 Python、MatlabやRのスキルが求められる • データを分析可能な形式に変換するスキルも 必要 (“Data wrangling”)*6 *6 データクレンジングとか前処理とか表現はいろいろ 21
  23. 23. 22 “Data Science Tasks” (2) • 何かを “発見” するには、アドホックな 分析が求められることが多い • Sparkのインタラクティブ処理機能が適する • Scalaシェル、Pythonシェルから高速・多機能 なAPI、パッケージを活用し、RやPandas*7 で やっていたよりも効率的に、問題を解決できる *7 Python Data Analysis Library 22
  24. 24. 23 “Data Processing Applications” (1) • アドホック分析が形になったら、 アプリケーションとして実装する • 多くのエンジニア*8 がSparkでデータ処理 アプリケーションを開発できるようになる • 分散処理、ネットワーク、障害対策を意識 しなくてもアプリケーションを開発できる *8 それなりのスキルがある 23
  25. 25. 24 “A Brief History of Spark” (1) • 2009年、UCB AMP Labで開発開始 • Hadoopは反復処理、インタラクティブ処理に 向かないという課題意識から出発 • 反復処理、インタラクティブ処理の高速化と インメモリ処理、高可用性を目標に開発 • 2009年の論文時点で特定のジョブについては Hadoopの10倍から20倍の高速化を達成 24
  26. 26. 25 “A Brief History of Spark” (2) • “Mobile Millennium Project” をはじめ内外の 多くのプロジェクトがSparkを採用 • Spark MeetupやSpark Summitが盛況 • 2011年、AMP LabはSparkを含むビッグ データ処理基盤の全体像をBDAS*9 として発表 • 2010年にOSS化、2013年にASFに寄贈 *9 Berkeley Data Analytics Stack 25
  27. 27. 26 “Spark Versions and Releases” • コミュニティと多くの開発者によって積極的な 開発が続いている • Spark 1.0は2014年5月にリリースされた • 本書はSpark 1.1.0をベースに執筆している • 注: この読書会資料は最新の1.2.1を ベースに動作確認しています 26
  28. 28. 27 参考: コミュニティの活発度 *10 *11 *10 http://www.slideshare.net/recruitcojp/2014-08-atlpresentationblogpptx *11 http://www.slideshare.net/hadoopxnttdata/20140802-nttd-sparkosckyoto 27
  29. 29. 28 “Storage Layers for Spark” • SparkはHadoop APIがサポートする ストレージを 利用できる (ローカル、HDFS、S3、Cassandra、Hive、Hbaseなど) • SparkにHadoop (全体) は「必要」ではない • データ読み込みに関するAPIだけあればよい ……以上が第1章の内容でした。 28

×