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