Amazon Elastic MapReduce で C++

Python だと複雑な処理を書けないので(主に慣れていないため),C++ で Mapper と Reducer を開発でできないか確認してみました.結論は,「たぶん大丈夫」です.

悩みどころは,基本的にバイナリの互換性がないと考えるべき Linux 環境において,「どうやって実行ファイルを作成しようか」ということです.もちろん,実行環境でビルドするのが確実なので,Amazon Elastic MapReduce で確保した Amazon EC2 の計算機にログインして make できれば最善と考えました.そして,試してみたところ,無事に動きました.

# EC2 のマシン上でビルドしたバイナリは Ubuntu 上でも動いたので,逆も問題ないのかもしれません.詳しい方,プリーズ….

というわけで,実行ファイルを手に入れるまでの手順を書いてみます.

  1. Key Pair の作成
    • EC2 で確保した計算機に ssh でログインするには,Key Pair が必要です.AWS Management Console の Amazon EC2 タブにて作成可能で,作業としては,適当な名前(Key Pair Name)を付けてやるだけです.作成した鍵は,ダウンロードして厳重に保管します.
  2. インスタンスの起動
    • 時間のかかりそうな Job Flow を作成して,インスタンスを起動します.実際に用いる予定の種類を選んでおくのが安全かもしれません.ポイントは,先ほど作成した Key Pair を Advanced Options で選択しておくことです.
  3. ドメイン名の確認
    • AWS Management Console の Amazon Elastic MapReduce タブにて確認できます.起動した Job Flow の Master Public DNS Name を調べてください.以下のようになっていると思います.
      • 例:ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
  4. ソースコードのアップロード
    • コマンド scp を使ってソースファイルをアップロードします.例えば,mapreduce.tar.gz というアーカイブを /mnt 以下にアップロードする場合,以下のようにします."secret-key.pem" の部分には,ダウンロードした鍵ファイルを指定します.
      • 例:scp -i secret-key.pem mapreduce.tar.gz hadoop@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:/mnt
  5. EC2 のマシンにログインしてビルド
    • コマンド ssh を使ってリモートログインします.
      • 例:ssh -i secret-key.pem hadoop@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com
    • アーカイブを展開してビルドします.
  6. 実行ファイルのダウンロード
    • コマンド scp を使って実行ファイルをダウンロードします.例えば,/mnt 以下に mapreduce-bin.tar.gz というアーカイブがある場合,以下のようにすればダウンロードできます.
      • 例:scp -i secret-key.pem hadoop@ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com:/mnt/mapreduce-bin.tar.gz .

後は,いつも通りの手順で実行ファイルを Amazon S3 にアップロードして,MapReduce を開始するだけです.とりあえず,私の環境では動作を確認できました.動くという保証はありませんが….

慣れた言語が使えるとなれば,メモリも限界まで有効活用したくなるところですが,(現在のところ)Mapper の並列数は 2-8,Reducer の並列数は 1-4 となっているようです.メモリ不足にはご注意ください.

追記(2009-09-18):scrp になっていた部分を scp に修正しました.