はじめに
これまでの連載
●Hadoop、hBaseで構築する大規模分散データ処理システム ●Hadoopのインストールとサンプルプログラムの実行 ●複数マシンへHadoopをインストールするblogeyeとは
﹁blogeye﹂︵ブログアイ︶は日本語のブログをクロール、リアルタイムに分析して、流行語と思われるものを推定し、ランキング形式で提供しているサイトです。特徴として、ブログサイトごとにその著者の性別・年齢・居住都道府県を推定しているため、流行語を著者属性ごとに推定したり、ユーザーが入力したキーワードや流行語を特によく使っている著者属性を表示したりすることができます。blogeyeの構成
blogeye全体の構成は下図のようになっています。
ブログのクローリング
著者属性の推定
著者属性推定プログラム︵図の右上︶は、ファイルシステム︵S3︶から過去にクロールしたすべての記事データを読み出し、日付ごとに管理されている記事をブログサイトごとにまとめなおして、各々のサイトについて著者属性を推定し、結果を著者属性データベースに格納します。流行度スコアの算出
キーワードクローラ︵図の右下︶はWikipediaの更新情報などからキーワードリストを取得し、キーワードデータベースに登録します。キーワードデータベースに登録されたデータは全文検索インデックスと著者属性データベースと共に流行Detector︵流行度スコア計算のプログラム︶で処理され、結果の流行度スコアが流行語データベースに登録されます。流行語のランキングを表示
ユーザー︵図の中央下部︶がブラウザを通じてクエリを送ると、Webサーバが流行語データベースや全文検索インデックスの内容を参照してページを生成し、ブラウザに返送します。Amazon EC2/S3の利用
blogeyeでは1日に50万~70万のブログ記事をクロールしており、システム内部には2億ページ強の記事を保管しています。blogeyeで行っている並列化が必要な処理は、大きく分けて2つあります。 1つはブログの更新情報を提供しているサービスであるpingサーバからのデータ取得や、ブログ記事の取得などの﹁クロール処理﹂です。2つ目は、﹁著者属性を推定する処理﹂です。クロールのように常に行う処理ではないですが、クロールしたすべての記事をサイトごとにまとめ直し、各サイトの著者属性を推定する大きな処理です。この2つの処理を行うため、Amazon EC2上にHadoop
クラスタを構成しました。
HadoopとAmazon EC2
HadoopとEC2はとても相性がよく、EC2の特徴である﹁必要なときに必要なだけ計算機リソースをレンタルできる﹂という性質をHadoop
クラスタにも継承できます。
Hadoop
クラスタを拡大したい時にはHadoopの開発者コミュニティが用意してくれているAMI︵Amazon Machine Image︶を自分で起動します。スレーブとして動作させるためのパラメータやマスターのアドレスを与えてこのAMIから起動すれば自動的にマスターに接続し、クラスタのスレーブとして認識されます。逆にクラスタを縮小したい場合には、いくつかのスレーブのインスタンスを単に終了します。終了させたマシンで実行されていたタスクは失敗しますが、Hadoopのマスターはこの失敗を検出して同じタスクを他のマシンに割り当て直すことにより、ジョブを問題なく継続してくれます。