Apache Sparkを利用した
「つぶやきビッグデータ」クローンと
リコメンドシステムの構築
GMOインターネット 次世代システム研究室
野田純一
Overview
1.自己紹介
2.目的
3.Sparkについて
4.Spark Streamingについて
5.検証サービス説明
6.Spark Streamingを使用したオンラインTwitter解析によ
るレコメンドシステム 「Mikasa」-三笠
7.まとめ
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
• Sparkについて少し執筆しました
• 「Software Design 2015年11月号」
• ConoHaを使ったHadoopクラスタの構成例と
SparkSQLをつかったデータ処理の実例が記載。
5
↓これが作りたい
2014 7月22日 NHK NEWS WEB
2. 目的
• HadoopのMapReduceとは別アプローチ(DAG)での並列
分散集計処理を行う
• インメモリー処理
• Hadoopエコシステムの一部として扱われるがHadoopと直
接的な関係はない
• APIを利用できる言語はScala, Java, Python
3. Sparkについて
5. Sparkについて 〜Spark処理でのDAG
DAG
• http://itpro.nikkeibp.co.jp/atcl/column/14/1226001
37/122600004/?ST=bigdata&P=3
いて
• Sparkサブシステムの一つでファイルからでなくリアルタイ
ムに流れてくるストリームソースに対しての集計を対象とし
ている。
• 直近1時間のツイート数を毎分集計する、直近3時間でアク
セスが多いIPを集計する・・などのウィンドウ集計が可能。
4. Spark Streamingについて
Spark Streaming 〜データソースについて
その他、ssc.socketTextStream(" localhost", 7777)
とするとローカルポートをソースにできるのでサーバーのログを流
し込んでリアルタイムにエラー、クラックIPの集計などが可能。
5. 検証サービス紹介
4. Spark Streamingを使用したオンライン
Twitter解析によるレコメンドシステム 「
Mikasa」-三笠
https://github.com/AKB428/mikasa_ol
https://github.com/AKB428/mikasa_rs
• Twitterストリームからデータを取得する。
• Twitter Streaming APIを使う。
• 400の検索キーワードが指定可能。
• Spark Streamingでリアルタイム集計を行う。
• 日本語文章を単語にわけて分解して集計
• 日本語を分解するため形態素解析ライブラリ
kuromojiを使う。
• アニメ作品など標準辞書にない単語はユーザー辞
書(CSV)を用意。
形態素解析ライブラリの必要性について
ユーザー辞書の必要性について
Spark Streamingによるウィンドウ集計の活用
Mikasaは直近5分、直近60分のデータ集計を毎
分行っている。(合計60*2=120回)
少ないソースコードで、ウィンドウ集計が可能
。
• ソースコード
• https://github.com/AKB428/mikasa_ol/blob/maste
r/src/main/scala/mikasa.scala
画面デモ(直近5分を毎分集計)
(F1)2015年4期 TVアニメ http://tv-anime.xyz/5/
(F1)2016年1期 TVアニメ http://akiba-net.com/5/
(F2)ラブライブ http://lovelive-net.com/5/
(F2)デブサミ http://2045.tokyo/5/
(F2)関東TV番組 http://telev.net/5/
F1=ユーザー辞書に登録してある単語のみ集計
F2=ユーザー辞書外の単語も集計
画面デモ(直近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=ユーザー辞書外の単語も集計
画面デモ 過去の履歴キャプチャ
26
2015年7月22日
7月22日 ラブライブ 矢澤にこ 誕生日
27
28
2015年7月22日
• コミケ 2015 12/31 朝8時頃
• 最近のバルス
31
京都OSC用 つぶやきビックデータ
検索ハッシュタグ 「#osckansai」
http://2045.tokyo/5/
http://2045.tokyo/60/
※URLの内容は8/8当日のみ
京都OSC用になります
8/8 〜12:00
32
8/8 12:24〜
33
8/8 13:20
34
8/8 15:10
35
8/8 15:20
36
8/8 15:40
37
8/8 16:10
38
デモ:リコメンドTwitterボット
https://twitter.com/Akihabaara_itso
https://twitter.com/AuctionMadoka
実際の売上
40
サーバーデモ
動作中のサーバーのコンソールを公開
• Mikasa Twitter のデータ収集解析の2つのアプロ
ーチについて
• ①Twitter Filter + ユーザー辞書のみの単語で絞る
• 1のメリット▶集計しやすい、後続の処理も設計しや
すい。
• 1のデメリット▶未知の単語を拾えない、ユーザー辞
書にひもづく別のワードを拾えない
• 結論:ある程度、解析対象のドメインが固定されて
いるものにはこのアプローチは有効
• ② Twitter Filter + ユーザー辞書を使いつつ全ての単語を集計
• メリット▶ 未知のワードが拾える、リアルなネットワーク解
析ができる。
• デメリット▶ ジャンクワードが多く出現するのでデータクレ
ンジングの作業にコストがかかる。
• 結論:解析対象が不明なドメインの場合、まずこのアプローチ
で回す。計測対象のネットワークが変動しやすいドメインの場
合はこのアプローチが有効。ある程度アプローチ2で回してア
プローチ1に切り替える、もしくはアプローチ1を追加した二
段のサービスに設計する。
Spark Streaming 〜ソースコード補足
• TwitterUtilは実体はJavaのTwitterライブラリで
あるtwitter4j
• Twitter解析にはTwitterAPI特有のAPIレートリ
ミット、単一IPによる高負荷時のアクセス制
限があるので注意
• 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
• 作ったシステムはスタンドアロンでも安定して動く(
4ヶ月放置しても安定動作 Spark1.4、Spark1.5)
• 視覚的にわかりやすい、作りやすいのでSpark入門用
の教材に最適、会社ではインターン生にCDH、HDPク
ラスタを構築してもらい、クラスタ上で動作するよう
作ってもらったりしている。(分散処理を体験したい
学生向け)
• イベントのハッシュタグを監視し、イベントの展示モ
ニタなどに使うといい感じ。(OSCでは実際使っても
らっている。
6.まとめ
コミュニティブースやっています!
IT系の同人誌を売っています。
つぶやきビッグデータクローンのデモもあるので
是非お立ち寄りください
ご清聴ありがとうございました
あんず&このは
LINEスタンプ発売中

Apache Sparkを利用した「つぶやきビッグデータ」クローンとリコメンドシステムの構築