つぶやきを追え ~『爆発するソーシャルメディア』との戦い~ (中編)
前回に引き続き『Hadoop&RabbitMQを利用したTwitter全量リアルタイム解析』(2012/12/10 Hadoopエンタープライズソリューションセミナー)の発表内容をご紹介します。
前回の内容は
- BuzzFinderとは
- Twitterデータのデータ量と情報内容
- BuzzFinderでの日本語解析処理 でしたが、今回はメインテーマである大規模データ処理フローです。
5. BuzzFinderでのTwitterデータ処理フロー
まずはバーン!と全体フロー。
ここでは
- Twitterデータを取得
- 取得したデータをTwitter解析クラスタで解析。Twitter解析クラスタはHadoop&RabbitMQで構成
- 解析データはPostgreSQLとCassandraに蓄積
- RailsサーバはPostgreSQLとCassandraから取得したデータをXML/JSON形式でAPI出力 という流れでデータを処理しています。
6. Twitter解析クラスタの構成
次はTwitter解析クラスタの中身です。
Twitter解析クラスタは
- 「速報性」を重視したリアルタイム処理クラスタ
- 「データ網羅性」を重視したバッチ処理クラスタ の2つのクラスタで構成していて、どちらも解析したデータはPostgreSQLとCassandraに蓄積しています。
6.1 Twitter解析バッチ処理クラスタ
バッチ処理クラスタのデータフローはこのようになっています。
6.2. Twitter解析リアルタイム処理クラスタ
一方、リアルタイム処理クラスタではMap処理にRabbitMQを利用。
補足: RabbitMQとは
RabbitMQとはメッセージキューソフトウェアと呼ばれるミドルウェアで、受け取ったメッセージを順番に出力します。
RabbitMQにメッセージを送ることを「Publish」と、メッセージを取得することを「Subscribe」と言いますが、上の図ではメッセージA, メッセージB, メッセージCをPublishした順番にSubscribeしています。
7. バッチ処理からリアルタイム処理への移行
BuzzFinderのバッチ処理は日本語解析Map処理、データ抽出Map処理、集計Reduce処理の3段構成で行っています。
この処理では日本語解析Map処理が段違いに重い処理となっていて、リアルタイム処理化の際にはこのMap処理を高速化することがポイントとなります。
そこでMap処理にRabbitMQを使ってストリーム処理化したのがこちらのアーキテクチャです。
Hadoopで行っていたMap処理をすべてRabbitMQ経由で行うことでストリーム処理化しています。
7.1. Map処理のRabbitMQ移行
Map処理のHadoopからRabbitMQへの移行では、Hadoop Streamingで実行していたMapperプログラムをRabbitMQ経由に変更しています。
こちらの図のように、Hadoopではある程度溜まった入力データを一気に処理していましたが、RabbitMQ経由の場合はメッセージキューにたまった入力データをデーモンプロセスが一つずつ処理しています。 こうすることでMap処理のストリーム処理化を実現しています。
今回のまとめ
今回の記事ではBuzzFinderでのTwitterデータ処理フローをご紹介しました。
BuzzFinderのリアルタイム処理はHadoopバッチ処理とRabbitMQストリーム処理の組み合わせになっているところが大きな特徴です。
次回は最終回となりますが、BuzzFinderでの実際の解析例をご紹介する予定です。
バックナンバー
- つぶやきを追え ~『爆発するソーシャルメディア』との戦い (前編)
- つぶやきを追え ~『爆発するソーシャルメディア』との戦い (中編)
- つぶやきを追え ~『爆発するソーシャルメディア』との戦い (後編)