1
GMOインターネット株式会社
次世代システム研究室
野田純一
2015.8.1
Spark Streamingを使用した
Twitter解析による レコメンドサービス例
1.自己紹介
2.研究目的
3.検証サービス説明
4.Spark Streamingを使用したオンラインTwitter解析によるレコメンドシステム
「Mikasa」-三笠
5.Sparkについて
6.Spark Streamingについて
7.参考文献紹介
8.まとめ
2
1. 自己紹介 野田純一
3
■結構前
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
2. 研究目的と背景
弊社、GMOインターネット次世代システム研究
室では1クウォーター(3ヶ月)に一度、2週間の
研究期間が取得できます(希望制+抽選)。
2015年2期の研究テーマに
「Spark Streaming and GraphX」を選択し社内
で研究発表を行いました。(45分)
今回はSpark Streamingの内容に絞って紹介しま
す。
4
2. 研究目的
• ストリーミング処理でTwitterオンライン解析がしたい
▶Spark Streaming
• SparkをScalaで書いてScalaの知見をためる。
• Sparkを利用したサービスの事例が少ないため実際に
検証用のマイクロ サービスを設計、実装、運用を行い
リファレンス的なサービスを作って業界に還元する。
5
3. 検証サービス説明
6
7
4. Spark Streamingを使用したオンライン
Twitter解析によるレコメンドシステム 「
Mikasa」-三笠
https://github.com/AKB428/mikasa_ol
https://github.com/AKB428/mikasa_rs
8
9
動画デモ
http://youtu.be/o6xq_RdNv6s
これがこのプレゼンを聞くと作れるようになります
。
10
11
12
• Twitterストリームからデータを取得する。
• Twitter Streaming APIを使う。
• 400の検索キーワードが指定可能。
• Spark Streamingでリアルタイム集計を行う。
13
14
• 日本語文章を単語にわけて分解して集計
• 日本語を分解するため形態素解析ライブラリ
kuromojiを使う。
• アニメ作品など標準辞書にない単語はユーザー辞
書(CSV)を用意。
形態素解析ライブラリの必要性について
15
ユーザー辞書の必要性について
16
Spark Streamingによるウィンドウ集計の活用
Mikasaは直近5分、直近60分のデータ集計を毎
分行っている。(合計60*2=120回)
少ないソースコードで、ウィンドウ集計が可能
。
17
ソースコード
• https://github.com/AKB428/mikasa_ol/blob/maste
r/src/main/scala/mikasa.scala
ユーザー辞書例
• https://github.com/AKB428/mikasa_ol/blob/maste
r/dictionary/anime_2015_3Q.txt
18
19
画面デモ(直近5分を毎分集計)
(F1)2015年3期 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=ユーザー辞書外の単語も集計
20
21
画面デモ(直近60分を毎分集計)
(F1)2015年3期 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=ユーザー辞書外の単語も集計
画面デモ 過去の履歴キャプチャ
22
https://akiba-souken.com/article/24303/
23
過去のキャプチャ2 今期(2015/夏期)のアニメ
24
過去のキャプチャ3 2015年7月22日
7月22日 ラブライブ 矢澤にこ 誕生日
25
デモ:リコメンドTwitterボット
https://twitter.com/Akihabaara_itso
https://twitter.com/AuctionMadoka
26
実際の売上
27
サーバーデモ
動作中のサーバーのコンソールを公開
28
ユーザー体験デモ(直近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=ユーザー辞書外の単語も集計
29
30
ユーザー体験デモ(直近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=ユーザー辞書外の単語も集計
• Mikasa Twitter のデータ収集解析の2つのアプロ
ーチについて
• ①Twitter Filter + ユーザー辞書のみの単語で絞る
• 1のメリット▶集計しやすい、後続の処理も設計しや
すい。
• 1のデメリット▶未知の単語を拾えない、ユーザー辞
書にひもづく別のワードを拾えない
• 結論:ある程度、解析対象のドメインが固定されて
いるものにはこのアプローチは有効
31
• ② Twitter Filter + ユーザー辞書を使いつつ全ての単語を集計
• メリット▶ 未知のワードが拾える、リアルなネットワーク解
析ができる。
• デメリット▶ ジャンクワードが多く出現するのでデータクレ
ンジングの作業にコストがかかる。
• 結論:解析対象が不明なドメインの場合、まずこのアプローチ
で回す。計測対象のネットワークが変動しやすいドメインの場
合はこのアプローチが有効。ある程度アプローチ2で回してア
プローチ1に切り替える、もしくはアプローチ1を追加した二
段のサービスに設計する。
32
Mikasaは新生ConoHa(パブリッククラウド)と
お名前.comのドメインで動いています。
http://www.onamae.com/
https://www.conoha.jp/
33
4. Spark Streaming 〜ソースコード補足
• TwitterUtilは実体はJavaのTwitterライブラリで
あるtwitter4j
• Twitter解析にはTwitterAPI特有のAPIレートリ
ミット、単一IPによる高負荷時のアクセス制
限があるので注意
• Twitter開発者アカウントには電話番号が必須
になったので気軽に開発はできなくなりつつ
ある。
34
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
35
SparkR
5. Sparkについて 〜Spark処理でのDAG
36
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
37
6. Spark Streaming について
• Sparkサブシステムの一つでファイルからでなくリアルタイ
ムに流れてくるストリームソースに対しての集計を対象とし
ている。
• 直近1時間のツイート数を毎分集計する、直近3時間でアク
セスが多いIPを集計する・・などのウィンドウ集計が可能。
38
6. Spark Streaming 〜データソースについて
その他、ssc.socketTextStream(" localhost", 7777)
とするとローカルポートをソースにできるのでサーバーのログを流
し込んでリアルタイムにエラー、クラックIPの集計などが可能。
39
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
40
7. 参考文献紹介-1
「Scala逆引きレシピ」
• 他言語経験者でScalaが初心者の方にお奨め、情
報も新しく、PlayフレームワークやSBTの説明も
豊富。
41
7. 参考文献紹介-2
「Learning Spark」
• Sparkのコーディングはこれを読めば理解可能。
• 英語初心者でもかなり読みやすい本なのでお奨
め。今年日本語化されるらしい。
42
8. まとめ
• Twitterストリームのリアルタイムな集計にSpark
Streamingは最適だった。(SQLだとデータを一度DB
に格納し日付系の長いSQLを打つ必要がある。)
• 日本語データを解析するためには形態素解析ライブラ
リの使い方の把握、ユーザー辞書のチューニング、デ
ータクレンジングが重要で、ある程度は時間がかかる
。
43
GMOインターネット 次世代システム研究室では
Hadoopエンジニアを募集しています。
http://recruit.gmo.jp/engineer/jisedai/
44
45
現在業務で使用している技術
ご清聴ありがとうございました
46

Spark streamingを使用したtwitter解析によるレコメンドサービス例