第1回 ``learning spark'' 読書会 第1章 ``introduction to data analysis with spark

29
1 “Learning Spark” 読書会 Chap. 1: “Introduction to Data Analysis with Spark– Spark によるデータ分析への招待 @data sciesotist 2015/2/28

Upload: sciesotist-data

Post on 21-Jul-2015

811 views

Category:

Data & Analytics


2 download

TRANSCRIPT

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

第 1回 “Learning Spark” 読書会

Chap. 1: “Introduction toData Analysis with Spark”

– Sparkによるデータ分析への招待 –

@data sciesotist

2015/2/28

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

1 “This chapter provides...”• この章では、Apache Sparkとは何なのか?ということについて、全体像を紹介します

• すでにApache Sparkと関連プロジェクトについてご存知ならば、読み飛ばして第2章に進んでください

……だそうです。

いきなり読み飛ばしてもアレなので読みますが

1

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

2 “What is Apache Spark?” (1)• 高速・汎用の分散処理プラットフォーム• 高速: MapReduceモデルを拡張し、インタラクティブ処理や、ストリーム処理に対応している

• データ処理のたびに何時間も待たなくてよい• インメモリで高速な処理が可能• MapReduce + ディスクより効率的

2

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

3 “What is Apache Spark?” (2)• 汎用性: それぞれ専用の仕組みが使われていたさまざまな処理に対応

• バッチ処理、反復処理、インタラクティブ処理、ストリーム処理

• それらを組み合わせた “データ分析パイプライン” を作れる

• いろんなツールを使い分ける必要もなく、管理が簡単

3

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

4 “What is Apache Spark?” (3)• Python、Java、ScalaのシンプルなAPIと

SQLへの対応、その他にも高機能な組み込みライブラリが用意されている

• 他のビッグデータ処理基盤とも統合可能で、Hadoopクラスタ上でSparkを実行したり、Cassandraを含むHadoopのデータソースにもアクセスできる

4

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

5 “A Unified Stack” (1)• Sparkプロジェクトはいくつもの密接に関連するコンポーネントから構成される

• Spark Core: リソースのスケジューリング、分散処理の割り当て、アプリケーションのモニタリングなどを担当

• コアの上でさまざまな用途 (SQL、機械学習)に特化したコンポーネントが動作する

• コンポーネントは組み合わせて利用できる5

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

6 “A Unified Stack” (2)• 密接な連携のおかげで、コアの改良が上位のコンポーネントの性能改善につながる

• 用途ごとにさまざまなシステムを個別に管理しなくてもよく、運用コストを低減できる

• 新機能の検証・導入も容易• 最大の利点は、異なる分析手法、使い方を組み合わせた利用が容易であること

6

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

7 “A Unified Stack” (3)• 例えば、ストリーム処理によって得られたリアルタイムデータを機械学習で分類する

• 例えば、アナリストはSQLで非構造化データを検索する、もう少しイケてるデータサイエンティストはPythonシェルでアドホック分析をする、他の人は一般的なバッチ処理の結果を見るなど、さまざまな使い方ができる

• IT部門は “Spark” だけを運用すればよい7

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

8 “A Unified Stack” (4)

Sparkの全体像 (SparkプロジェクトWebサイトより)

※本の図版とは多少異なります8

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

9 構成要素 (1) Spark Core• スケジューリング、メモリ管理、障害復旧、ストレージとのやりとりなどを担当

• RDDs (Resilient Distributed Datasets) という概念とそれを扱うためのAPIを提供する

• RDDsは “コレクション”で、複数のノードにまたがって配置され、並列で処理できる

9

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

10 構成要素 (2) Spark SQL• Hive (HQL) と同等の、SQLを用いて構造化データを扱うためのパッケージ

■ Hive、Parquet、JSONなどに対応している

■ Python、Java、ScalaからRDDsに対してSQLを発行するためのAPIを提供する

■ 単一のSparkアプリケーション中で、SQL操作と複雑な分析を組み合わせられる

■ 以前はSharkというプロジェクトだった

10

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

11 構成要素 (2) Spark SQL

Spark SQLは既存のHiveなどと連携できる

既存のBIツールからビッグデータを検索できる11

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

12 構成要素 (3) Spark Streaming

• ストリームデータ*1を扱うためのパッケージ

■ RDDsと密接に連携したストリームデータ処理のためのAPIを提供する

■ インメモリ、オンディスク、ストリームデータを扱うアプリケーション間でAPIの共通性が高いため、学習やプログラムの改変が容易

*1 間断なく入力されるデータ。リアルタイムデータ12

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

13 構成要素 (3) Spark Streaming

標準機能を用いて、特別な記述なしに耐障害性が実現できる13

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

14 構成要素 (4) MLlib• 機械学習の機能を提供するパッケージ■ 分類、回帰、クラスタリング、協調フィルタリング*2

の各アルゴリズムに対応

■ 最急降下法*3など、低レベルの関数も提供されている

■ クラスタへのスケールアップを意図して設計されている

*2 いわゆるレコメンド*3 関数の最適化を行う手法の1つ……だそう

14

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

15 構成要素 (4) MLlib

ロジスティック回帰の実行速度をHadoopと比較した様子

15

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

16 構成要素 (5) GraphX• グラフ*4を扱うためのパッケージ

• Spark CoreのRDDs APIを拡張し、任意のノードとエッジを用いたグラフが扱える

• ページランクや三角形の数のカウント*5など広く使われるアルゴリズムを実装している

*4 数学のグラフ理論が扱う、データどうしのつながりを「ノード」と「エッジ」で表現したもの

*5 ソーシャルグラフの分析でよく使うらしい16

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

17 構成要素 (5) GraphX

ノードとエッジからなるグラフをさまざまに分析可能17

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

18 構成要素 (6) クラスタ管理• Sparkはサーバ単体での利用から数千台規模への拡張まで、高いスケーラビリティを意図して設計されている

• 高い拡張性を実現するために、SparkはHadoop YARN、Apache Mesos、自身のスタンドアロンスケジューラなどのクラスタマネージャ上で動作する

• デフォルトはスタンドアロンスケジューラ18

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

19 “Who Uses Spark, and for What?”

• Sparkは汎用のフレームワークなので、さまざまな用途で利用されている

• 大まかにはデータサイエンティストとエンジニアが主要なユーザ

• もちろん1人の人が両方のスキルを持ち、両方の立場を切り替えてデータ処理を行うことも多いが、ここではそれぞれのグループにおけるユースケースを見ていく

19

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

20 参考: 「データサイエンティスト」のスキルセット

出典: データサイエンティスト協会「データサイエンティストに求められるスキルセット」http://prtimes.jp/main/html/rd/p/000000005.000007312.html

20

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

21 “Data Science Tasks” (1)• 流行りの言葉で明確な定義はない• 一般に、データを分析し、モデル化すること• SQL、統計学、機械学習などへの理解、

Python、MatlabやRのスキルが求められる

• データを分析可能な形式に変換するスキルも必要 (“Data wrangling”)*6

*6 データクレンジングとか前処理とか表現はいろいろ21

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

22 “Data Science Tasks” (2)• 何かを “発見”するには、アドホックな分析が求められることが多い

• Sparkのインタラクティブ処理機能が適する

• Scalaシェル、Pythonシェルから高速・多機能なAPI、パッケージを活用し、RやPandas*7でやっていたよりも効率的に、問題を解決できる

*7 Python Data Analysis Library22

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

23 “Data Processing Applications” (1)

• アドホック分析が形になったら、アプリケーションとして実装する

• 多くのエンジニア*8がSparkでデータ処理アプリケーションを開発できるようになる

• 分散処理、ネットワーク、障害対策を意識しなくてもアプリケーションを開発できる

*8 それなりのスキルがある23

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

24 “A Brief History of Spark” (1)• 2009年、UCB AMP Labで開発開始

• Hadoopは反復処理、インタラクティブ処理に向かないという課題意識から出発

• 反復処理、インタラクティブ処理の高速化とインメモリ処理、高可用性を目標に開発

• 2009年の論文時点で特定のジョブについてはHadoopの10倍から20倍の高速化を達成

24

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

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 Stack25

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

26 “Spark Versions and Releases”• コミュニティと多くの開発者によって積極的な開発が続いている

• Spark 1.0は2014年5月にリリースされた

• 本書はSpark 1.1.0をベースに執筆している

• 注: この読書会資料は最新の1.2.1をベースに動作確認しています

26

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

27 参考: コミュニティの活発度

*10 *11

*10http://www.slideshare.net/recruitcojp/2014-08-atlpresentationblogpptx

*11http://www.slideshare.net/hadoopxnttdata/20140802-nttd-sparkosckyoto

27

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

28 “Storage Layers for Spark”

• SparkはHadoop APIがサポートするストレージを利用できる(ローカル、HDFS、S3、Cassandra、Hive、Hbaseなど)

• SparkにHadoop (全体) は「必要」ではない

• データ読み込みに関するAPIだけあればよい

……以上が第1章の内容でした。

28