SlideShare a Scribd company logo
Copyright © BrainPad Inc. All Rights Reserved.
Pythonで入門するApache Spark
2016年9月22日@PyConJP 2016
Copyright © BrainPad Inc. All Rights Reserved.
 名前
– Tatsuya Atsumi
– Twitter: https://twitter.com/__Attsun__
 仕事
– BrainPad
– 自社製品(DMP)の開発
 好きなもの
– Python
• 6年くらい
– Spark
• 1年半くらい
 その他
– 今年刊行された「詳解Apache Spark」のレビュアーを担当させていただきました。と
ても良い本です!
2
自己紹介
Copyright © BrainPad Inc. All Rights Reserved.
 対象者
– Sparkについて興味があるが、詳しいことはまだよく知らない方。
– Pythonで基本的なプログラミングができる方。
 狙い
– Sparkについての基礎的な特徴を理解していただく。
– Pythonを使ったSparkの使用方法について理解していただく。
– Sparkのライブラリについて、特にSparkSQLとMLlibについての理解をしていただく。
3
本プレゼンでの対象者と狙い
Copyright © BrainPad Inc. All Rights Reserved.
1. Apache Sparkの概要と歴史
2. 弊社内でのSpark使用事例について
3. Apache Sparkの基礎(コアAPI)
4. Spark SQL
5. MLlib
6. まとめ
 Appendix(実行モデルとスケジューリング)
4
アジェンダ
Copyright © BrainPad Inc. All Rights Reserved.
1. Apache Sparkの概要と歴史
5
Copyright © BrainPad Inc. All Rights Reserved.
公式ドキュメントによると、
Apache Spark is a fast and general-purpose cluster computing system.
つまり、「高速」と「多目的」を特徴とした分散処理システム。
 複数台のサーバを使って、大量のデータを高速に処理できる。
 タスクのスケジューリングや障害発生時の復旧のような分散処理にまつわる面倒
な点はSparkがカバーしてくれる。
 MapReduceで行われていたようなログ集計から、レコメンドシステム、リアル
タイム処理まで幅広い用途で使われている。
6
Sparkとは
Copyright © BrainPad Inc. All Rights Reserved.
 中間データの少ないインメモリによる処理
7
高速?
入力
データ
処理
中間
データ
処理
出力
データ
MapReduceの場合、処理ごとに中間データを作成しているため、処理が増えるほどディ
スクIOが増え、パフォーマンスに影響を与える。
入力
データ
処理 処理
出力
データ
Sparkの場合、中間データを出力する必要のない処理はまとめて実行される。(勿論、中
間データが必要になるケースもある。)
Copyright © BrainPad Inc. All Rights Reserved.
 多様なライブラリ
– Sparkには、便利なライブラリが最初から付属している。
• SparkSQL(DBやJSONなど構造化データに対してSQLを使ってアクセス)
• Spark Streaming(ストリーミングデータ処理)
• MLlib(機械学習)
• GraphX(グラフデータ処理)
– すべてSparkのコアコンポーネントをベースとしているため、コードの再利用や学習コ
ストの低下、メンテナンス容易性の向上が期待できる。
8
多目的?
Copyright © BrainPad Inc. All Rights Reserved.
 多様なAPI
– 以下4つのプログラミング言語をサポートしている。
• Python
• Scala
• Java
• R
– Pythonは、以下バージョンをサポートしている。
• 2.6以上
• 3.4以上
• PyPy2.3以上
– 今日はPython2.7をベースとした使い方について話します。
9
多目的?
Copyright © BrainPad Inc. All Rights Reserved.
 何であるか?
– 大規模データの分散処理フレームワーク
• 従来のMapReduceの代替みたいなイメージ
 何でないか?
– 分散ファイルシステム(HDFS)
• HDFSやS3を代替するものではない。
– リソーススケジューラ(YARN, Mesos)
• Sparkがこれらのリソーススケジューラ上で起動する。
– 小規模なデータを処理するツール
• シンプルにPython書いたほうが速いし楽。
• 増え続ける大規模データを一定の速度で処理したい、スケーラビリティを確保したい、という
ケースでなければはまらないと思われる。
10
Sparkは何であるか?何でないか?
Copyright © BrainPad Inc. All Rights Reserved.
 わかりやすいインターフェース
– APIはmap, filterなど動作が把握できるものが多い。SQLも使える。
 高速
– 大規模データを高速に処理できる。(従来のMapReduceに比べてという話)
 様々なユースケースに対応できる多様なライブラリ
– 機械学習、ストリーミングのようなモダンなユースケースに対応できるのは嬉しい。
 従来のHadoopスタックが利用可能
– YARNやHDFSといった、従来のHadoopスタックを使用できるため、クラスタを新た
に作り直す必要はない。
 情報量の多さとコミュニティの安心感
– 類似の様々なフレームワークが存在するが、情報量ではSparkに分がありそう。
– バージョンアップを行う際にも後方互換生を気にしてくれるなど、開発も硬い。
11
なぜSparkを使うか?
Copyright © BrainPad Inc. All Rights Reserved.
 略歴
– 2009年からUC Berkleyで開発が始められる。
– 2010年にオープンソース化。
– 2013年にApache Software Foundationに寄贈される。
– 2014年にApache Top-Level Projectに昇格
– 2014年にバージョン1.0.0がリリース
– 2016年にバージョン2.0.0がリリース
現在(2016/8/15時点)での最新バージョンは2.0.0。
今日の解説は2.0.0を前提としています。
12
Sparkの歴史
Copyright © BrainPad Inc. All Rights Reserved.
2. 弊社でのSpark使用事例について
13
Copyright © BrainPad Inc. All Rights Reserved.
DeltaCubeについて
 弊社が開発する、DMP製品。
 サイトの行動ログなどから、ユーザーをセグメントに分けるツール。
Copyright © BrainPad Inc. All Rights Reserved.
自動クラスタリング機能
 人手を介さず、自動的にユーザーをいい感じにセグメントわけする機能。
 これをSparkで実現。
– 増え続ける大量のデータに対して複雑な処理をしたい、というニーズにぴったり。
Copyright © BrainPad Inc. All Rights Reserved. 16
Sparkでの自動クラスタリングの流れ
 ユーザーの行動ログから、KMeansでクラスタリングをし、セグメントを判定し
て保存する。
– 特徴量は、ユーザーの閲覧ページカテゴリの傾向
Copyright © BrainPad Inc. All Rights Reserved. 17
Sparkでの自動クラスタリングの流れ
 今日は基礎部分(コアAPI)を簡単に解説後、Spark SQL, MLlibに焦点を絞って
解説します。
Copyright © BrainPad Inc. All Rights Reserved.
3. Apache Sparkの基礎(コアAPI)
18
Copyright © BrainPad Inc. All Rights Reserved. 19
(jupyter)Sparkをはじめてみよう
Sparkはインタプリターがあるので、お試しで起動するのもすごく簡単です。
デフォルトのPythonインタープリタのほか、iPythonやjupyter notebook上でも気
軽に起動できます。
今回はjupyter notebook上で起動してみます。
Copyright © BrainPad Inc. All Rights Reserved.
 RDDは、クラスタ上に分散したデータを束ねるコレクションオブジェクト。
 Sparkでプログラミングを行う際は、RDDのみを意識し、個々のデータがどこに
どのように分散されているか、という点は隠蔽されている。
 そのため、ユーザーは通常のコレクションオブジェクトに対する操作を書く感覚
で分散処理を実現できる。
20
RDD
データ
データ
データ
データ
データ
データ
データ
データ
データ
パーティション
ノード
RDD
Copyright © BrainPad Inc. All Rights Reserved.
 RDDはTransformationと呼ばれる処理ごとに、新たなRDDオブジェクトが作
成される。
– map
– filter
 実際の処理は、Actionと呼ばれる処理が実行されるまで遅延される。
– count
– take
– saveAsTextFile
21
遅延実行
RDD RDD RDD
transformationにより生成 transformationにより生成
参照を保持参照を保持
Copyright © BrainPad Inc. All Rights Reserved. 22
(jupyter)RDDの処理イメージ
Copyright © BrainPad Inc. All Rights Reserved.
4. Spark SQL
23
Copyright © BrainPad Inc. All Rights Reserved.
 構造化されたデータに対してSQLで処理を記述するためのライブラリ
– JSONとかCSVとかRDBとか。
 DataFrame
– 構造化データを保持するデータコレクション。PandasのDataFrameのようなイメージ。
– RDDをより使い勝手の良いのもにした感じ。
24
Spark SQLとは
Copyright © BrainPad Inc. All Rights Reserved. 25
(jupyter) SparkSQLを動かしてみよう
Copyright © BrainPad Inc. All Rights Reserved.
 select, filter, join, limit, orderByのような基本的な操作
 UDF(ユーザー定義関数)
– もちろん、関数はPythonで記述可能。
– https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.S
QLContext.registerFunction
 window関数
 abs, ceilのような関数
関数やメソッドはそれ以外にも数多くあります。APIドキュメントを参照。
26
DataFrameのメソッド
Copyright © BrainPad Inc. All Rights Reserved.
 JSON
 CSV
 Parquet
 HiveTable
 その他
– JDBC
– ORC
– 外部ライブラリを使うことで、avroなどのフォーマットも扱えるようになります。
• csvはもともと外部ライブラリだったものが本体に取り込まれました。
27
様々なデータソース
Copyright © BrainPad Inc. All Rights Reserved.
 SQLで処理を記述する場合、Spark固有のAPIを使う必要がない。
 DataFrameを使う場合でも、より少ないコードで可読性の高いコードが書ける。
– RDDと比べて。
 オプティマイザにより処理が最適化される
– Databricksのベンチマークを参照
• https://databricks.com/blog/2015/04/24/recent-performance-improvements-in-
apache-spark-sql-python-dataframes-and-more.html
– RDDによる処理は、ScalaがPythonの倍以上高速
– DataFrameによる処理では言語間の差がないほか、RDDよりも高速
– RDDに比べて細かいチューニングが不要になる。
28
(jupyter)Spark SQLのメリット
Copyright © BrainPad Inc. All Rights Reserved.
5. MLlib
29
Copyright © BrainPad Inc. All Rights Reserved.
 Sparkで機械学習を行うためのライブラリ。
 ロジスティック回帰やKMeansなど、基本的なものは揃っている。
 spark.mlとspark.mllibという2つのAPIがある。
– 今回はDataFrameをベースとしたspark.mlを解説。
30
MLlib
Copyright © BrainPad Inc. All Rights Reserved.
 学習モデルを作成する際によくある以下のような流れをシンプルに表現するため
のAPI
– spark.mlのみ。
– 皆さんが好きなscikit-learnライブラリのPipelineに影響を受けたと書いてあります。
– 入出力はDataFrame
31
パイプラインAPI
元データ 加工データ 特徴量データ 学習モデル
加工・抽出処理 特徴量作成処理 学習処理
Copyright © BrainPad Inc. All Rights Reserved.
 Transformer
– 入力データ(DataFrame)から異なる出力データ(DataFrame)を生成するコンポー
ネント。
– 文章から単語を生成するTokenizerなど。
• 「This is a pen」-> 「”This”, “is”, “a”, “pen”」
 Estimator
– DataFrameからTransformerを生成するコンポーネント。
– LogisticRegressionやKMeansなどの学習アルゴリズム。
 Pipeline
– TransformerやEstimatorを組み合わせて予測モデルを構築する。
32
パイプラインAPIを構成するコンポーネント
Copyright © BrainPad Inc. All Rights Reserved. 33
パイプラインAPIを構成するコンポーネント
元データ 加工データ 特徴量データ 学習モデル
加工・抽出処理 特徴量作成処理 学習処理
Pipeline
Transformer Estimator
 先ほどの図をコンポーネントにわけると以下のような分類となる。
Copyright © BrainPad Inc. All Rights Reserved.
 スパムメッセージの判定を行う。
– データセット
• UCI(カリフォルニア大学アーバイン校)にあるやつ
• https://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection
• Sparkが生まれたのはバークレー校
– 特徴量
• 単語の出現頻度
– モデル
• ロジスティック回帰
– 扱うライブラリ
• SparkML
• DataFrame
34
(jupyter)SparkML(&DataFrame)の使用例
Copyright © BrainPad Inc. All Rights Reserved.
6. まとめ
35
Copyright © BrainPad Inc. All Rights Reserved.
 Sparkは、インメモリ処理による高速性と、多目的なライブラリを持つ分散処理
フレームワーク。
 Spark SQLとMLlibを組み合わせることで、弊社のケースのような大規模データ
に対する複雑な処理も簡単に。
 データ量の少ないタスクにとっては速度的にも運用負荷の面でもいいことがない
と思われるので、やみくもな導入は避けたい。
36
まとめ
Copyright © BrainPad Inc. All Rights Reserved.
 自分で動かしてみて、Sparkを体感してみましょう。
 本を買ってみましょう。
 GraphXやSpark Streamingなど、今回触れなかったライブラリについて調べて
みましょう。
 DriverやExecutorといった実行モデルについて調べてみましょう。
 Shuffle処理について調べてみましょう。
– パフォーマンス改善の勘所の一つ
37
さらに知りたい方へ
Copyright © BrainPad Inc. All Rights Reserved.
ブレインパッドでは、「データ分析」と「エンジニアリング」の融合により新しい
価値を提供したいエンジニア・データサイエンティストを募集しています!
ご興味ある方は是非お気軽に話しかけてください!
38
WE ARE HIRING !!
Copyright © BrainPad Inc. All Rights Reserved.
ご静聴ありがとうございました。
39
Copyright © BrainPad Inc. All Rights Reserved.
株式会社ブレインパッド
〒108-0071 東京都港区白金台3-2-10 白金台ビル3F
TEL:03-6721-7001
FAX:03-6721-7010
info@brainpad.co.jp
Copyright © BrainPad Inc. All Rights Reserved.
www.brainpad.co.jp
Copyright © BrainPad Inc. All Rights Reserved.
Appendix: 実行モデルとスケジューリング
41
Copyright © BrainPad Inc. All Rights Reserved. 42
Sparkの実行モデル
Driver
Executor
 Driver
– ユーザープログラムをtaskに変換し、
executorに実行を命令する。
– Actionに伴いexecutorからデータを取得する。
– ユーザープログラムのmainメソッドを実行す
るJVMプロセス。driverが終了すると、Spark
アプリケーション自体が終了する。
 Executor
– driverから命令されたtaskを実行する。
– RDDのキャッシュを保持する。
– Spark起動時に起動されるJVMプロセス。
※実際には、YARNやMesosなどのクラスタマ
ネージャ上で動作するので、それによって実行モ
デルは若干異なります。
Executor
Executor
Copyright © BrainPad Inc. All Rights Reserved.
1. ユーザープログラムが、transformationを組み合わせてRDDの参照グラフを作
成する。
2. ユーザープログラムが、actionを実行する。
3. Driverが、RDDの依存グラフから実行プランを作成する。
– 実行プランは複数のステージからなる。
– Stage
• 複数のTaskの集合。
• Shuffle(後述)が必要となるポイントでStageを分ける。
• 同じパーティションに対する処理が連続している場合、マージすることで最適化する。
– Task
• executorの実行する処理の最小単位。1パーティションごとに作成される。
4. Executorに各Stageの処理を命令する。
43
Driverによる実行計画作成
Copyright © BrainPad Inc. All Rights Reserved.
 Shuffle
– reduceByKey等により複数のパーティションを1つにまとめるため、データをある
executorから別のexecutorに転送する処理。
– 処理がローカルで済まなくなるため、パフォーマンス上のボトルネックになりやすい。
– Shuffleがある場合、Stageの分割が発生する。
44
Shuffle
RDD
RDD
RDD
RDD
RDD
RDD
RDD
RDD
RDD
RDD
RDD
RDD
同じパーティションに閉じた処理ならシャッフルは
不要(mapなど)
別パーティションが必要になる処理では、
シャッフルが生じる。
Copyright © BrainPad Inc. All Rights Reserved.
 Stageは、Shuffleを境界として分断
される。
– このケースではjoinがShuffleを起こし
ている。
 同じパーティションに対する処理が連
続する場合、処理は1つのステージに
マージされる。(※)
– Stage1はmapとfilterの2つの処理があ
るが、実際にはmapとfilterを合成した
1つのStageに変換されている。
– これは“pipelining”と呼ばれる。
– Stageは複数のtaskで構成されており、
それぞれがexecutorで処理される。
※厳密には、親RDDが1つの子RDDからのみし
か参照されていない場合。(複数パーティション
をマージするunionもこれに該当する)
45
Stageの分割例
map filter
map
join
Stage1
Stage2
Stage3
Copyright © BrainPad Inc. All Rights Reserved.
 py4jを使って、PythonプログラムとJVMでやりとりをする。
 アクションやシャッフル処理は、基本的にはJava / Scalaと同じくJVM上で実行される。
– 一部のアクションやmap、filter等に渡される関数はJVMが起動するPythonで実行される。
46
PythonでのSpark実行モデル
Python py4j
Driver
(JVM)
py4j Executer
Executer
Executer
(JVM)
Python
Python
Python

More Related Content

What's hot (20)

PDF
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
 
PPT
はやわかりHadoop
Shinpei Ohtani
 
PPTX
Pysparkで始めるデータ分析
Tanaka Yuichi
 
PDF
本当にあったApache Spark障害の話
x1 ichi
 
PDF
Apache Sparkについて
BrainPad Inc.
 
PDF
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
LINE Corp.
 
PPTX
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
Kazutaka Tomita
 
PDF
Sparkを用いたビッグデータ解析 〜 前編 〜
x1 ichi
 
PDF
Apache Spark の紹介(前半:Sparkのキホン)
NTT DATA OSS Professional Services
 
PDF
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Future Of Data Japan
 
PPTX
初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜
Tanaka Yuichi
 
PDF
SparkやBigQueryなどを用いた モバイルゲーム分析環境
yuichi_komatsu
 
PPTX
Apache Sparkを使った感情極性分析
Tanaka Yuichi
 
PDF
Hadoop ecosystem NTTDATA osc15tk
NTT DATA OSS Professional Services
 
PDF
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Kazuki Taniguchi
 
PDF
Apache Sparkのご紹介 (後半:技術トピック)
NTT DATA OSS Professional Services
 
PPTX
Bluemixを使ったTwitter分析
Tanaka Yuichi
 
PDF
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
NTT DATA OSS Professional Services
 
PPTX
Big datauniversity
Tanaka Yuichi
 
PDF
基幹業務もHadoopで!! -ローソンにおける店舗発注業務への Hadoop + Hive導入と その取り組みについて-
Keigo Suda
 
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
 
はやわかりHadoop
Shinpei Ohtani
 
Pysparkで始めるデータ分析
Tanaka Yuichi
 
本当にあったApache Spark障害の話
x1 ichi
 
Apache Sparkについて
BrainPad Inc.
 
15.05.21_ビッグデータ分析基盤Sparkの最新動向とその活用-Spark SUMMIT EAST 2015-
LINE Corp.
 
Apache cassandraと apache sparkで作るデータ解析プラットフォーム
Kazutaka Tomita
 
Sparkを用いたビッグデータ解析 〜 前編 〜
x1 ichi
 
Apache Spark の紹介(前半:Sparkのキホン)
NTT DATA OSS Professional Services
 
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Future Of Data Japan
 
初めてのSpark streaming 〜kafka+sparkstreamingの紹介〜
Tanaka Yuichi
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
yuichi_komatsu
 
Apache Sparkを使った感情極性分析
Tanaka Yuichi
 
Hadoop ecosystem NTTDATA osc15tk
NTT DATA OSS Professional Services
 
QConTokyo2015「Sparkを用いたビッグデータ解析 〜後編〜」
Kazuki Taniguchi
 
Apache Sparkのご紹介 (後半:技術トピック)
NTT DATA OSS Professional Services
 
Bluemixを使ったTwitter分析
Tanaka Yuichi
 
データ活用をもっともっと円滑に! ~データ処理・分析基盤編を少しだけ~
NTT DATA OSS Professional Services
 
Big datauniversity
Tanaka Yuichi
 
基幹業務もHadoopで!! -ローソンにおける店舗発注業務への Hadoop + Hive導入と その取り組みについて-
Keigo Suda
 

Similar to Pythonで入門するApache Spark at PyCon2016 (20)

PPTX
Spark Summit 2014 の報告と最近の取り組みについて
Recruit Technologies
 
PDF
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群
Yu Ishikawa
 
PPTX
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
Tanaka Yuichi
 
PDF
Data Scientist Workbench - dots0729
s. kaijima
 
PDF
データ分析に必要なスキルをつけるためのツール~Jupyter notebook、r連携、機械学習からsparkまで~
The Japan DataScientist Society
 
PPTX
1028 TECH & BRIDGE MEETING
健司 亀本
 
PDF
SparkMLlibで始めるビッグデータを対象とした機械学習入門
Takeshi Mikami
 
PDF
20190517 Spark+AI Summit2019最新レポート
Ryoma Nagata
 
PDF
2016-02-08 Spark MLlib Now and Beyond@Spark Conference Japan 2016
Yu Ishikawa
 
PPT
Quick Overview of Upcoming Spark 3.0 + α
Takeshi Yamamuro
 
PDF
Survey of Apache Spark
Mila, Université de Montréal
 
PPTX
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
Yu Ishikawa
 
PDF
The Future of Apache Spark
Hadoop / Spark Conference Japan
 
PPTX
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
PPTX
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Recruit Technologies
 
PDF
HivemallとSpark MLlibの比較
Makoto Yui
 
PDF
Yifeng spark-final-public
Yifeng Jiang
 
PPTX
Apache Spark チュートリアル
K Yamaguchi
 
PDF
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Katsushi Yamashita
 
PPTX
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
Spark Summit 2014 の報告と最近の取り組みについて
Recruit Technologies
 
2015-11-17 きちんと知りたいApache Spark ~機械学習とさまざまな機能群
Yu Ishikawa
 
SparkとJupyterNotebookを使った分析処理 [Html5 conference]
Tanaka Yuichi
 
Data Scientist Workbench - dots0729
s. kaijima
 
データ分析に必要なスキルをつけるためのツール~Jupyter notebook、r連携、機械学習からsparkまで~
The Japan DataScientist Society
 
1028 TECH & BRIDGE MEETING
健司 亀本
 
SparkMLlibで始めるビッグデータを対象とした機械学習入門
Takeshi Mikami
 
20190517 Spark+AI Summit2019最新レポート
Ryoma Nagata
 
2016-02-08 Spark MLlib Now and Beyond@Spark Conference Japan 2016
Yu Ishikawa
 
Quick Overview of Upcoming Spark 3.0 + α
Takeshi Yamamuro
 
Survey of Apache Spark
Mila, Université de Montréal
 
2015 03-12 道玄坂LT祭り第2回 Spark DataFrame Introduction
Yu Ishikawa
 
The Future of Apache Spark
Hadoop / Spark Conference Japan
 
大量のデータ処理や分析に使えるOSS Apache Spark入門(Open Source Conference 2021 Online/Kyoto 発表資料)
NTT DATA Technology & Innovation
 
2014 11-20 Machine Learning with Apache Spark 勉強会資料
Recruit Technologies
 
HivemallとSpark MLlibの比較
Makoto Yui
 
Yifeng spark-final-public
Yifeng Jiang
 
Apache Spark チュートリアル
K Yamaguchi
 
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
Katsushi Yamashita
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
Daiyu Hatakeyama
 
Ad

Pythonで入門するApache Spark at PyCon2016

  • 1. Copyright © BrainPad Inc. All Rights Reserved. Pythonで入門するApache Spark 2016年9月22日@PyConJP 2016
  • 2. Copyright © BrainPad Inc. All Rights Reserved.  名前 – Tatsuya Atsumi – Twitter: https://twitter.com/__Attsun__  仕事 – BrainPad – 自社製品(DMP)の開発  好きなもの – Python • 6年くらい – Spark • 1年半くらい  その他 – 今年刊行された「詳解Apache Spark」のレビュアーを担当させていただきました。と ても良い本です! 2 自己紹介
  • 3. Copyright © BrainPad Inc. All Rights Reserved.  対象者 – Sparkについて興味があるが、詳しいことはまだよく知らない方。 – Pythonで基本的なプログラミングができる方。  狙い – Sparkについての基礎的な特徴を理解していただく。 – Pythonを使ったSparkの使用方法について理解していただく。 – Sparkのライブラリについて、特にSparkSQLとMLlibについての理解をしていただく。 3 本プレゼンでの対象者と狙い
  • 4. Copyright © BrainPad Inc. All Rights Reserved. 1. Apache Sparkの概要と歴史 2. 弊社内でのSpark使用事例について 3. Apache Sparkの基礎(コアAPI) 4. Spark SQL 5. MLlib 6. まとめ  Appendix(実行モデルとスケジューリング) 4 アジェンダ
  • 5. Copyright © BrainPad Inc. All Rights Reserved. 1. Apache Sparkの概要と歴史 5
  • 6. Copyright © BrainPad Inc. All Rights Reserved. 公式ドキュメントによると、 Apache Spark is a fast and general-purpose cluster computing system. つまり、「高速」と「多目的」を特徴とした分散処理システム。  複数台のサーバを使って、大量のデータを高速に処理できる。  タスクのスケジューリングや障害発生時の復旧のような分散処理にまつわる面倒 な点はSparkがカバーしてくれる。  MapReduceで行われていたようなログ集計から、レコメンドシステム、リアル タイム処理まで幅広い用途で使われている。 6 Sparkとは
  • 7. Copyright © BrainPad Inc. All Rights Reserved.  中間データの少ないインメモリによる処理 7 高速? 入力 データ 処理 中間 データ 処理 出力 データ MapReduceの場合、処理ごとに中間データを作成しているため、処理が増えるほどディ スクIOが増え、パフォーマンスに影響を与える。 入力 データ 処理 処理 出力 データ Sparkの場合、中間データを出力する必要のない処理はまとめて実行される。(勿論、中 間データが必要になるケースもある。)
  • 8. Copyright © BrainPad Inc. All Rights Reserved.  多様なライブラリ – Sparkには、便利なライブラリが最初から付属している。 • SparkSQL(DBやJSONなど構造化データに対してSQLを使ってアクセス) • Spark Streaming(ストリーミングデータ処理) • MLlib(機械学習) • GraphX(グラフデータ処理) – すべてSparkのコアコンポーネントをベースとしているため、コードの再利用や学習コ ストの低下、メンテナンス容易性の向上が期待できる。 8 多目的?
  • 9. Copyright © BrainPad Inc. All Rights Reserved.  多様なAPI – 以下4つのプログラミング言語をサポートしている。 • Python • Scala • Java • R – Pythonは、以下バージョンをサポートしている。 • 2.6以上 • 3.4以上 • PyPy2.3以上 – 今日はPython2.7をベースとした使い方について話します。 9 多目的?
  • 10. Copyright © BrainPad Inc. All Rights Reserved.  何であるか? – 大規模データの分散処理フレームワーク • 従来のMapReduceの代替みたいなイメージ  何でないか? – 分散ファイルシステム(HDFS) • HDFSやS3を代替するものではない。 – リソーススケジューラ(YARN, Mesos) • Sparkがこれらのリソーススケジューラ上で起動する。 – 小規模なデータを処理するツール • シンプルにPython書いたほうが速いし楽。 • 増え続ける大規模データを一定の速度で処理したい、スケーラビリティを確保したい、という ケースでなければはまらないと思われる。 10 Sparkは何であるか?何でないか?
  • 11. Copyright © BrainPad Inc. All Rights Reserved.  わかりやすいインターフェース – APIはmap, filterなど動作が把握できるものが多い。SQLも使える。  高速 – 大規模データを高速に処理できる。(従来のMapReduceに比べてという話)  様々なユースケースに対応できる多様なライブラリ – 機械学習、ストリーミングのようなモダンなユースケースに対応できるのは嬉しい。  従来のHadoopスタックが利用可能 – YARNやHDFSといった、従来のHadoopスタックを使用できるため、クラスタを新た に作り直す必要はない。  情報量の多さとコミュニティの安心感 – 類似の様々なフレームワークが存在するが、情報量ではSparkに分がありそう。 – バージョンアップを行う際にも後方互換生を気にしてくれるなど、開発も硬い。 11 なぜSparkを使うか?
  • 12. Copyright © BrainPad Inc. All Rights Reserved.  略歴 – 2009年からUC Berkleyで開発が始められる。 – 2010年にオープンソース化。 – 2013年にApache Software Foundationに寄贈される。 – 2014年にApache Top-Level Projectに昇格 – 2014年にバージョン1.0.0がリリース – 2016年にバージョン2.0.0がリリース 現在(2016/8/15時点)での最新バージョンは2.0.0。 今日の解説は2.0.0を前提としています。 12 Sparkの歴史
  • 13. Copyright © BrainPad Inc. All Rights Reserved. 2. 弊社でのSpark使用事例について 13
  • 14. Copyright © BrainPad Inc. All Rights Reserved. DeltaCubeについて  弊社が開発する、DMP製品。  サイトの行動ログなどから、ユーザーをセグメントに分けるツール。
  • 15. Copyright © BrainPad Inc. All Rights Reserved. 自動クラスタリング機能  人手を介さず、自動的にユーザーをいい感じにセグメントわけする機能。  これをSparkで実現。 – 増え続ける大量のデータに対して複雑な処理をしたい、というニーズにぴったり。
  • 16. Copyright © BrainPad Inc. All Rights Reserved. 16 Sparkでの自動クラスタリングの流れ  ユーザーの行動ログから、KMeansでクラスタリングをし、セグメントを判定し て保存する。 – 特徴量は、ユーザーの閲覧ページカテゴリの傾向
  • 17. Copyright © BrainPad Inc. All Rights Reserved. 17 Sparkでの自動クラスタリングの流れ  今日は基礎部分(コアAPI)を簡単に解説後、Spark SQL, MLlibに焦点を絞って 解説します。
  • 18. Copyright © BrainPad Inc. All Rights Reserved. 3. Apache Sparkの基礎(コアAPI) 18
  • 19. Copyright © BrainPad Inc. All Rights Reserved. 19 (jupyter)Sparkをはじめてみよう Sparkはインタプリターがあるので、お試しで起動するのもすごく簡単です。 デフォルトのPythonインタープリタのほか、iPythonやjupyter notebook上でも気 軽に起動できます。 今回はjupyter notebook上で起動してみます。
  • 20. Copyright © BrainPad Inc. All Rights Reserved.  RDDは、クラスタ上に分散したデータを束ねるコレクションオブジェクト。  Sparkでプログラミングを行う際は、RDDのみを意識し、個々のデータがどこに どのように分散されているか、という点は隠蔽されている。  そのため、ユーザーは通常のコレクションオブジェクトに対する操作を書く感覚 で分散処理を実現できる。 20 RDD データ データ データ データ データ データ データ データ データ パーティション ノード RDD
  • 21. Copyright © BrainPad Inc. All Rights Reserved.  RDDはTransformationと呼ばれる処理ごとに、新たなRDDオブジェクトが作 成される。 – map – filter  実際の処理は、Actionと呼ばれる処理が実行されるまで遅延される。 – count – take – saveAsTextFile 21 遅延実行 RDD RDD RDD transformationにより生成 transformationにより生成 参照を保持参照を保持
  • 22. Copyright © BrainPad Inc. All Rights Reserved. 22 (jupyter)RDDの処理イメージ
  • 23. Copyright © BrainPad Inc. All Rights Reserved. 4. Spark SQL 23
  • 24. Copyright © BrainPad Inc. All Rights Reserved.  構造化されたデータに対してSQLで処理を記述するためのライブラリ – JSONとかCSVとかRDBとか。  DataFrame – 構造化データを保持するデータコレクション。PandasのDataFrameのようなイメージ。 – RDDをより使い勝手の良いのもにした感じ。 24 Spark SQLとは
  • 25. Copyright © BrainPad Inc. All Rights Reserved. 25 (jupyter) SparkSQLを動かしてみよう
  • 26. Copyright © BrainPad Inc. All Rights Reserved.  select, filter, join, limit, orderByのような基本的な操作  UDF(ユーザー定義関数) – もちろん、関数はPythonで記述可能。 – https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.S QLContext.registerFunction  window関数  abs, ceilのような関数 関数やメソッドはそれ以外にも数多くあります。APIドキュメントを参照。 26 DataFrameのメソッド
  • 27. Copyright © BrainPad Inc. All Rights Reserved.  JSON  CSV  Parquet  HiveTable  その他 – JDBC – ORC – 外部ライブラリを使うことで、avroなどのフォーマットも扱えるようになります。 • csvはもともと外部ライブラリだったものが本体に取り込まれました。 27 様々なデータソース
  • 28. Copyright © BrainPad Inc. All Rights Reserved.  SQLで処理を記述する場合、Spark固有のAPIを使う必要がない。  DataFrameを使う場合でも、より少ないコードで可読性の高いコードが書ける。 – RDDと比べて。  オプティマイザにより処理が最適化される – Databricksのベンチマークを参照 • https://databricks.com/blog/2015/04/24/recent-performance-improvements-in- apache-spark-sql-python-dataframes-and-more.html – RDDによる処理は、ScalaがPythonの倍以上高速 – DataFrameによる処理では言語間の差がないほか、RDDよりも高速 – RDDに比べて細かいチューニングが不要になる。 28 (jupyter)Spark SQLのメリット
  • 29. Copyright © BrainPad Inc. All Rights Reserved. 5. MLlib 29
  • 30. Copyright © BrainPad Inc. All Rights Reserved.  Sparkで機械学習を行うためのライブラリ。  ロジスティック回帰やKMeansなど、基本的なものは揃っている。  spark.mlとspark.mllibという2つのAPIがある。 – 今回はDataFrameをベースとしたspark.mlを解説。 30 MLlib
  • 31. Copyright © BrainPad Inc. All Rights Reserved.  学習モデルを作成する際によくある以下のような流れをシンプルに表現するため のAPI – spark.mlのみ。 – 皆さんが好きなscikit-learnライブラリのPipelineに影響を受けたと書いてあります。 – 入出力はDataFrame 31 パイプラインAPI 元データ 加工データ 特徴量データ 学習モデル 加工・抽出処理 特徴量作成処理 学習処理
  • 32. Copyright © BrainPad Inc. All Rights Reserved.  Transformer – 入力データ(DataFrame)から異なる出力データ(DataFrame)を生成するコンポー ネント。 – 文章から単語を生成するTokenizerなど。 • 「This is a pen」-> 「”This”, “is”, “a”, “pen”」  Estimator – DataFrameからTransformerを生成するコンポーネント。 – LogisticRegressionやKMeansなどの学習アルゴリズム。  Pipeline – TransformerやEstimatorを組み合わせて予測モデルを構築する。 32 パイプラインAPIを構成するコンポーネント
  • 33. Copyright © BrainPad Inc. All Rights Reserved. 33 パイプラインAPIを構成するコンポーネント 元データ 加工データ 特徴量データ 学習モデル 加工・抽出処理 特徴量作成処理 学習処理 Pipeline Transformer Estimator  先ほどの図をコンポーネントにわけると以下のような分類となる。
  • 34. Copyright © BrainPad Inc. All Rights Reserved.  スパムメッセージの判定を行う。 – データセット • UCI(カリフォルニア大学アーバイン校)にあるやつ • https://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collection • Sparkが生まれたのはバークレー校 – 特徴量 • 単語の出現頻度 – モデル • ロジスティック回帰 – 扱うライブラリ • SparkML • DataFrame 34 (jupyter)SparkML(&DataFrame)の使用例
  • 35. Copyright © BrainPad Inc. All Rights Reserved. 6. まとめ 35
  • 36. Copyright © BrainPad Inc. All Rights Reserved.  Sparkは、インメモリ処理による高速性と、多目的なライブラリを持つ分散処理 フレームワーク。  Spark SQLとMLlibを組み合わせることで、弊社のケースのような大規模データ に対する複雑な処理も簡単に。  データ量の少ないタスクにとっては速度的にも運用負荷の面でもいいことがない と思われるので、やみくもな導入は避けたい。 36 まとめ
  • 37. Copyright © BrainPad Inc. All Rights Reserved.  自分で動かしてみて、Sparkを体感してみましょう。  本を買ってみましょう。  GraphXやSpark Streamingなど、今回触れなかったライブラリについて調べて みましょう。  DriverやExecutorといった実行モデルについて調べてみましょう。  Shuffle処理について調べてみましょう。 – パフォーマンス改善の勘所の一つ 37 さらに知りたい方へ
  • 38. Copyright © BrainPad Inc. All Rights Reserved. ブレインパッドでは、「データ分析」と「エンジニアリング」の融合により新しい 価値を提供したいエンジニア・データサイエンティストを募集しています! ご興味ある方は是非お気軽に話しかけてください! 38 WE ARE HIRING !!
  • 39. Copyright © BrainPad Inc. All Rights Reserved. ご静聴ありがとうございました。 39
  • 40. Copyright © BrainPad Inc. All Rights Reserved. 株式会社ブレインパッド 〒108-0071 東京都港区白金台3-2-10 白金台ビル3F TEL:03-6721-7001 FAX:03-6721-7010 [email protected] Copyright © BrainPad Inc. All Rights Reserved. www.brainpad.co.jp
  • 41. Copyright © BrainPad Inc. All Rights Reserved. Appendix: 実行モデルとスケジューリング 41
  • 42. Copyright © BrainPad Inc. All Rights Reserved. 42 Sparkの実行モデル Driver Executor  Driver – ユーザープログラムをtaskに変換し、 executorに実行を命令する。 – Actionに伴いexecutorからデータを取得する。 – ユーザープログラムのmainメソッドを実行す るJVMプロセス。driverが終了すると、Spark アプリケーション自体が終了する。  Executor – driverから命令されたtaskを実行する。 – RDDのキャッシュを保持する。 – Spark起動時に起動されるJVMプロセス。 ※実際には、YARNやMesosなどのクラスタマ ネージャ上で動作するので、それによって実行モ デルは若干異なります。 Executor Executor
  • 43. Copyright © BrainPad Inc. All Rights Reserved. 1. ユーザープログラムが、transformationを組み合わせてRDDの参照グラフを作 成する。 2. ユーザープログラムが、actionを実行する。 3. Driverが、RDDの依存グラフから実行プランを作成する。 – 実行プランは複数のステージからなる。 – Stage • 複数のTaskの集合。 • Shuffle(後述)が必要となるポイントでStageを分ける。 • 同じパーティションに対する処理が連続している場合、マージすることで最適化する。 – Task • executorの実行する処理の最小単位。1パーティションごとに作成される。 4. Executorに各Stageの処理を命令する。 43 Driverによる実行計画作成
  • 44. Copyright © BrainPad Inc. All Rights Reserved.  Shuffle – reduceByKey等により複数のパーティションを1つにまとめるため、データをある executorから別のexecutorに転送する処理。 – 処理がローカルで済まなくなるため、パフォーマンス上のボトルネックになりやすい。 – Shuffleがある場合、Stageの分割が発生する。 44 Shuffle RDD RDD RDD RDD RDD RDD RDD RDD RDD RDD RDD RDD 同じパーティションに閉じた処理ならシャッフルは 不要(mapなど) 別パーティションが必要になる処理では、 シャッフルが生じる。
  • 45. Copyright © BrainPad Inc. All Rights Reserved.  Stageは、Shuffleを境界として分断 される。 – このケースではjoinがShuffleを起こし ている。  同じパーティションに対する処理が連 続する場合、処理は1つのステージに マージされる。(※) – Stage1はmapとfilterの2つの処理があ るが、実際にはmapとfilterを合成した 1つのStageに変換されている。 – これは“pipelining”と呼ばれる。 – Stageは複数のtaskで構成されており、 それぞれがexecutorで処理される。 ※厳密には、親RDDが1つの子RDDからのみし か参照されていない場合。(複数パーティション をマージするunionもこれに該当する) 45 Stageの分割例 map filter map join Stage1 Stage2 Stage3
  • 46. Copyright © BrainPad Inc. All Rights Reserved.  py4jを使って、PythonプログラムとJVMでやりとりをする。  アクションやシャッフル処理は、基本的にはJava / Scalaと同じくJVM上で実行される。 – 一部のアクションやmap、filter等に渡される関数はJVMが起動するPythonで実行される。 46 PythonでのSpark実行モデル Python py4j Driver (JVM) py4j Executer Executer Executer (JVM) Python Python Python

Editor's Notes

  • #13: 7分
  • #18: 10分
  • #21: クラスタ上に分散するデータコレクションオブジェクト
  • #23: 14分
  • #29: 21分
  • #32: 例えば、テキストをトークナイザで単語にわけて(加工・抽出処理)、単語ごとに出現頻度を数値化し(特徴量作成処理)、ロジスティック回帰で分類器を作成する。
  • #35: 28分