Amazon Elastic MapReduce をお試し中

大規模なコーパスを本格的に処理することを考えて,MapReduce の勉強をしています.手元に MapReduce をおこなえる環境はないのですが,Amazon Web Services (AWS) のおかげで,思いのほか手軽に試すことができました.

Amazon Elastic MapReduce を利用する場合,データの入出力に Amazon S3 を使用し,計算資源として Amazon EC2 を使用することになります.データの大きさ,転送量,確保するサーバ数などで費用は変化しますが,小規模の実験(例えば,I/O 各 1GB,サーバ 4 台,1 時間くらい)であれば,特に意識する必要はないと思います.ただし,いろいろ試していると少しずつ効いてきます.

私の場合,Python で Map の処理を書いてみたのですが,慣れていない言語であり,環境の違いでエラーが起きたたことなどもあって,10 回近くも Job Flow を FAILED で終わらせてしまいました.もったいない….

とりあえず,今回で学んだことをメモしておきます.

  • 入出力ファイルの圧縮はできるのかな?
    • 入力:自動で認識してくれるようです(確認済み)
    • 出力:Extra Args に -jobconf mapred.output.compress=true を加えてやれば,gzip で圧縮されたファイルが出力されます(確認済み)
  • ログが欲しいときはどうすればいい?
    • サーバ割り当てのところで Show Advanced Options をクリックすると,Amazon S3 Log Path を指定できます(確認済み)

追記(2009-09-13):Extra Args に -cmdenv オプションを加えることにより,環境変数を新たに定義できます.Mapper や Reducer にパラメータを渡したいときに利用可能で,例えば,以下のように指定します.

  • Extra Args による環境変数の定義
    • -cmdenv CHAR_NGRAM_MAX_KEY_LENGTH=2
    • -cmdenv INT_SUM_TOTAL_VALUE_THRESHOLD=10

追記(2009-09-14):入力ディレクトリにある圧縮ファイルが自動的に認識されることを確認しました.