Fluentd+ElasticSearch+Kibanaでアイドルデータ分析基盤を作ってみたの回で、FluentdとTwitter Streaming APIを使ってS3にツイートデータを保存したので、このデータをHadoopを使って解析してみます。

今回はMeCabを使って形態素解析してワードカウントを取るような教科書的なMapReduceを試してみました。Hadoop Streamingを使ってPythonでMapper、Reducerを書いていきます。

環境

  • OS: Mac OS X(El Capitan)
  • Python: 2.7.11
  • Hadoop: 2.7.1

Hadoopのインストール&設定

以下のURLを参考にインストール&設定すればOK。

Macなら brew install hadoopで一発。

インストールしたら、~/.bashrcか~/.zshrcにこんな感じで設定しておきます。環境変数HADOOP_CLASSPATHに$HADOOP_HOME/libexec/share/hadoop/tools/lib/*を入れないと”ls: No FileSystem for scheme: s3n hadoop”とエラーが発生するので注意。

Macで擬似分散モードを試すときは[システム環境設定]>[共有]でリモートログインを許可しておく。

Hadoop StreamingのMapper、Reducer

Mapperは対象のデータを標準入力で受け取り、Key/Valueを標準出力に吐き出すようなコード、ReducerはMapperの標準出力を入力としてKey/Valueを集計するようなコードをそれぞれ書けばOKです。今回はMapperでMeCabを使って形態素解析をするため、MeCabのインストールを行います。MeCabのダウンロードはこちら

辞書もインストール

Pythonバインディングのインストール

ユーザ辞書の元CSVデータ作成

ユーザ辞書を作成

MeCabにユーザ辞書を設定(/usr/local/lib/mecab/dic/ipadic/dicrc)

Mapperの実装

Reducerの実装

Mapperでツイート内容を形態素解析かけるときは、encodeしないと以下のようなエラーが発生するので注意

S3のデータを利用する設定

core-site.xmlの設定はこんな感じで↓

以下のコマンドを実行して問題なくS3にアクセスできることを確認します。

Hadoopの起動

結果の確認は以下のコマンドで

3/19のツイート収集結果はこんな感じ

正規表現のフィルタリングをキツ目に設定しているのでメンバーが良い感じに出力できています。卒業コンサートがあった永島聖羅が高め。アンダーでは北野日奈子強いです。

参考URL