Spark Streaming と Spark GraphX を使用したTwitter解析による...

55
‹#› Spark Streaming & Spark GraphX を使用したTwitter解析による レコメンドサービス例 GMOインターネット株式会社 次世代システム研究室 野田純一 2015.6.25

Transcript of Spark Streaming と Spark GraphX を使用したTwitter解析による...

Page 1: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

!Spark Streaming & Spark GraphX を使用したTwitter解析による レコメンドサービス例

GMOインターネット株式会社 次世代システム研究室 野田純一

2015.6.25

Page 2: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Overview1.自己紹介

2.研究目的

3.検証サービス説明

4.Spark Streamingを使用したオンラインTwitter解析によるレコメンドシステム 「Mikasa」-三笠

5.Sparkについて

6.Spark Streamingについて

7.Spark Streaming + Spark GraphXを使用したTwitter解析とレコメンドシステム 「Ikazuchi」-雷

8.Spark GraphXについて

9.参考文献紹介

10.まとめ

Page 3: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

1. 自己紹介 野田純一■結構前

Java2EEによる業務オペレーションシステム

■ちょっと前

Perl/Rubyでソーシャルゲーム フレームワーク開発

■最近

Hadoopでアドテク

!Github: https://github.com/AKB428

Twitter: @n428dev

Qiita: http://qiita.com/AKB428

Hatena: http://akb428.hatenablog.com/

本部: http://akibalab.info/

Junichi Noda Larry Wall

Page 4: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 5: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

2. 研究目的

• ストリーミング処理でTwitterオンライン解析がしたい▶Spark Streaming

• Twitterのソーシャル・ネットワークグラフを解析したい▶Spark GraphX

• SparkをScalaで書いてScalaの知見をためる。

• Sparkを利用したサービスの事例が少ないため実際に検証用のマイクロ サービスを設計、実装、運用を行いリファレンス的なサービスを作って業界に還元する。

Page 6: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

3. 検証サービス説明

Page 7: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 8: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

4. Spark Streamingを使用したオンラインTwitter解析によるレコメンドシステム

「Mikasa」-三笠

!!

https://github.com/AKB428/mikasa_ol https://github.com/AKB428/mikasa_rs

!

Page 9: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 10: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

動画デモ

!!!!!!!!http://youtu.be/o6xq_RdNv6s

これがこのプレゼンを聞くと作れるようになります。

Page 11: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 12: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 13: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

• Twitterストリームからデータを取得する。

• Twitter Streaming APIを使う。

• 400の検索キーワードが指定可能。

• Spark Stremingでリアルタイム集計を行う。

Page 14: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

!• 日本語文章を単語にわけて分解して集計

• 日本語を分解するため形態素解析ライブラリkuromojiを使う。

• アニメ作品など標準辞書にない単語はユーザー辞書(CSV)を用意。

Page 15: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

形態素解析ライブラリの必要性について

Page 16: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

ユーザー辞書の必要性について

Page 17: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Spark Streamingによるウィンドウ集計の活用

Mikasaは直近5分、直近60分のデータ集計を毎分行っている。(合計60*2=120回)

少ないソースコードで、ウィンドウ集計が可能。

Page 18: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

• ソースコード

• https://github.com/AKB428/mikasa_ol/blob/master/src/main/scala/mikasa.scala

Page 19: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 20: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

画面デモ(直近5分を毎分集計)

(F1)2015年2期 TVアニメ http://tv-anime.xyz/5/

(F1)ラブライブ http://tv-anime.biz/5/

(F2)ラブライブ http://lovelive-net.com/5/

(F2)秋葉原 http://akiba-net.com/5/

(F2)関東TV番組 http://telev.net/5/

F1=ユーザー辞書に登録してある単語のみ集計

F2=ユーザー辞書外の単語も集計

Page 21: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

画面デモ(直近60分を毎分集計)

(F1)2015年2期 TVアニメ http://tv-anime.xyz/60/

(F1)ラブライブ http://tv-anime.biz/60/

(F2)ラブライブ http://lovelive-net.com/60/

(F2)秋葉原 http://akiba-net.com/60/

(F2)関東TV番組 http://telev.net/60/

F1=ユーザー辞書に登録してある単語のみ集計

F2=ユーザー辞書外の単語も集計

Page 22: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

画面デモ 過去の履歴キャプチャ

Page 23: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

デモ:リコメンドTwitterボット

https://twitter.com/Akihabaara_itso https://twitter.com/AuctionMadoka !

Page 24: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

サーバーデモ

動作中のサーバーのコンソールを公開

Page 25: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

ユーザー体験デモ(直近5分集計)携帯でアクセス!

(F1)2015年2期 TVアニメ http://tv-anime.xyz/5/

(F1)ラブライブ http://tv-anime.biz/5/

(F2)ラブライブ http://lovelive-net.com/5/

(F2)秋葉原 http://akiba-net.com/5/

(F2)関東TV番組 http://telev.net/5/

F1=ユーザー辞書に登録してある単語のみ集計

F2=ユーザー辞書外の単語も集計

Page 26: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

ユーザー体験デモ(直近60分集計)携帯でアクセス

(F1)2015年2期 TVアニメ http://tv-anime.xyz/60/

(F1)ラブライブ http://tv-anime.biz/60/

(F2)ラブライブ http://lovelive-net.com/60/

(F2)秋葉原 http://akiba-net.com/60/

(F2)関東TV番組 http://telev.net/60/

F1=ユーザー辞書に登録してある単語のみ集計

F2=ユーザー辞書外の単語も集計

Page 27: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

• Mikasa Twitter のデータ収集解析の2つのアプローチについて

• ①Twitter Filter + ユーザー辞書のみの単語で絞る

• 1のメリット▶集計しやすい、後続の処理も設計しやすい。

• 1のデメリット▶未知の単語を拾えない、ユーザー辞書にひもづく別のワードを拾えない

• 結論:ある程度、解析対象のドメインが固定されているものにはこのアプローチは有効

Page 28: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

• ② Twitter Filter + ユーザー辞書を使いつつ全ての単語を集計

• メリット▶ 未知のワードが拾える、リアルなネットワーク解析ができる。

• デメリット▶ ジャンクワードが多く出現するのでデータクレンジングの作業にコストがかかる。

• 結論:解析対象が不明なドメインの場合、まずこのアプローチで回す。計測対象のネットワークが変動しやすいドメインの場合はこのアプローチが有効。ある程度アプローチ2で回してアプローチ1に切り替える、もしくはアプローチ1を追加した二段のサービスに設計する。

Page 29: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Mikasaは申請ConoHaと

お名前.comのドメインで動いています。

Page 30: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

4. Spark Streaming ~ソースコード補足

• TwitterUtilは実体はJavaのTwitterライブラリであるtwitter4j

• Twitter解析にはTwitterAPI特有のAPIレートリミット、単一IPによる高負荷時のアクセス制限があるので注意

• Twitter開発者アカウントには電話番号が必須になったので気軽に開発はできなくなりつつある。

Page 31: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

5. Sparkについて

!!!!!• HadoopのMapReduceとは別アプローチ(DAG)での並列分散集計処理を行う

• インメモリー処理

• Hadoopエコシステムの一部として扱われるがHadoopと直接的な関係はない

• 2015年6月11日に 1.4.0 がリリース。https://spark.apache.org/releases/spark-release-1-4-0.html

• 1.4.0でSparkRが追加(R言語でSparkを利用できる)

• APIを利用できる言語はScala, Java, Python

SparkR

Page 32: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

5. Sparkについて ~Spark処理でのDAG

Page 33: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

5. Sparkについて~最近の情勢 • 2015年6月15日 IBMが開発者と研究者を3500人Spark関連プロジェクトに投入 http://japan.zdnet.com/article/35065964/

• 2015年 6月15~17日 Spark summit 2015 開催 (サンフランシスコ)

• NTTデータが定期的に勉強会を実施

• 国内のサービス実例は少ない

• 2大Hadoopディストリビューション CDHとHDPにはSparkが搭載

• Spark1.4からはUIでモニタリングも行えるようになった。

http://qiita.com/AKB428/items/71900eecdf2350e1e45f

Page 34: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

6. Spark Streaming について

!!!!!• Sparkサブシステムの一つでファイルからでなくリアルタイムに流れてくるストリームソースに対しての集計を対象としている。

• 直近1時間のツイート数を毎分集計する、直近3時間でアクセスが多いIPを集計する・・などのウィンドウ集計が可能。

Page 35: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

6. Spark Streaming ~データソースについて

!!!!!!その他、ssc.socketTextStream(" localhost", 7777)

とするとローカルポートをソースにできるのでサーバーのログを流し込んでリアルタイムにエラー、クラックIPの集計などが可能。

Page 36: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Mikasaインストールについて

インストールマニュアル

https://gist.github.com/AKB428/c30bc6a979e05fa3a022 • TwitterAPIとAmazonAPIのアカウントがあれば1時間でセットアップ完了。

• AmazonAPIはリコメンドしない場合は不要。

• TwitterAPIのアカウント取得も10分程度で可能。

Mikasa OL https://github.com/AKB428/mikasa_ol Mikasa RS https://github.com/AKB428/mikasa_rs

Page 37: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

8. Spark Streaming + Spark GraphXを使用したTwitter解析とレコメンドシステム

「Ikazuchi」-雷

!https://github.com/AKB428/ikazuchi_ol https://github.com/AKB428/ikazuchi_rs

Page 38: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 39: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 40: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

ロジックを単純化するため

ACOOUNT:単語を”:”で連結したものをカウントしていく。

@akb428:ラブライブ,@akb428:アイマス,@odaken:俺物語

Page 41: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Page 42: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

• Kafkaをソースとして受け取りストリーム処理

• 受け取ったものを順次GraphXに渡していく

Page 43: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

関連商品の2階層目までを取得

Page 44: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

グラフ解析の適用範囲について

• 元々はTwitterのソーシャルグラフを解析する想定でした。

• しかしTwitterのソーシャルグラフをAPIで取得するのは困難と判明。

• あるアカウントのフォロワーを取得するAPIは1 callにつき5000人まで取得可能だが、そのAPIは15分に15回しか実行できない。

• 今回は商品グラフデータをダミーで用意して実施。

Page 45: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

8.Ikazuchi 実行中コンソール デモ

Page 46: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

Ikazuchi セットアップ

https://github.com/AKB428/ikazuchi_ol !https://github.com/AKB428/ikazuchi_rs !• 必要なサーバー、ソフトウェアはMikasaと同じ

• 商品グラフデータはAmazonAPIなどオープン系のプロダクトAPIを使い「あなたにお勧め」商品を紐付けるか、自社のユーザー購買履歴から構築。

Page 47: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

8. Spark GraphXについて

• Sparkでグラフデータを解析するサブシステム

• グラフデータを解析できるがコードは直感的ではない

• またあまり開発も盛り上がっておらず、Spark1.4では唯一更新がないサブシステム

https://spark.apache.org/releases/spark-release-1-4-0.html • Spark Packageにアドオンが唯一ない

http://spark-packages.org/ ・オライリーの「Lerning Spark」にもサブシステムで唯一解説がない。

Page 48: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

8. Spark GraphXについて

グラフを自前で処理するコードは直感的ではないが実装されているアルゴリズム(例えばページランクアルゴリズム)は使用しやすく数行で利用できる。

http://qiita.com/AKB428/items/bf1cd05d6cf3e23986d9

Page 49: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

val graph: Graph[Int, Int] = GraphLoader.edgeListFile(sc, args(0)).cache() val ranks = graph.pageRank(0.0001).vertices val users = sc.textFile(args(1)).map { line => val fields = line.split(",") (fields(0).toLong, fields(1)) } val ranksByUsername = users.join(ranks).map { case (id, (username, rank)) => (username, rank) } println(ranksByUsername.collect().mkString("\n"))

Page 50: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

8. Spark GraphXについて

GpaphXが需要がない理由は以下が考えられる

• RDBからグラフデータ処理への頭の変換のコスト

• そもそもグラフデータを持っている企業が少ない

• グラフデータをオープンで公開してる企業が少ない

• 現実の問題に適用しにくい、RDB・表概念で事たりている。

• GraphXが活性化するにはページランクアルゴリズム並に簡単に使えるライブラリの充実が不可欠。

!

Page 51: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

• 9. 参考文献紹介-1

!!!!「Scala逆引きレシピ」

• 他言語経験者でScalaが初心者の方にお奨め、情報も新しく、PlayフレームワークやSBTの説明も豊富。

Page 52: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

• 9. 参考文献紹介-2

!!!!「Learning Spark」

• Sparkのコーディングはこれを読めば理解可能。

• 英語初心者でもかなり読みやすい本なのでお奨め。今年日本語化されるらしい。

Page 53: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

• 10. まとめ

• Twitterストリームのリアルタイムな集計にSpark Streamingは最適だった。(SQLだとデータを一度DBに格納し日付系の長いSQLを打つ必要がある。)

• 日本語データを解析するためには形態素解析ライブラリの使い方の把握、ユーザー辞書のチューニング、データクレンジングが重要で、ある程度は時間がかかる。

• Spark GpaphXは対象となるグラフデータを持っていないとグラフデータの構築から準備するコストが発生。

Page 54: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

研究に2週間の時間を頂きました。チームの皆様、ご協力本当に ありがとうございました。

素晴らしい試みなので続けていきたいと思います。

Page 55: Spark Streaming と Spark GraphX を使用したTwitter解析による レコメンドサービス例

‹#›

ご清聴ありがとうございました