Amazon Elastic MapReduce で C++
Python だと複雑な処理を書けないので(主に慣れていないため),C++ で Mapper と Reducer を開発でできないか確認してみました.結論は,「たぶん大丈夫」です.
悩みどころは,基本的にバイナリの互換性がないと考えるべき Linux 環境において,「どうやって実行ファイルを作成しようか」ということです.もちろん,実行環境でビルドするのが確実なので,Amazon Elastic MapReduce で確保した Amazon EC2 の計算機にログインして make できれば最善と考えました.そして,試してみたところ,無事に動きました.
# EC2 のマシン上でビルドしたバイナリは Ubuntu 上でも動いたので,逆も問題ないのかもしれません.詳しい方,プリーズ….
というわけで,実行ファイルを手に入れるまでの手順を書いてみます.
- Key Pair の作成
- EC2 で確保した計算機に ssh でログインするには,Key Pair が必要です.AWS Management Console の Amazon EC2 タブにて作成可能で,作業としては,適当な名前(Key Pair Name)を付けてやるだけです.作成した鍵は,ダウンロードして厳重に保管します.
- インスタンスの起動
- 時間のかかりそうな Job Flow を作成して,インスタンスを起動します.実際に用いる予定の種類を選んでおくのが安全かもしれません.ポイントは,先ほど作成した Key Pair を Advanced Options で選択しておくことです.
- ドメイン名の確認
- ソースコードのアップロード
- EC2 のマシンにログインしてビルド
- 実行ファイルのダウンロード
後は,いつも通りの手順で実行ファイルを Amazon S3 にアップロードして,MapReduce を開始するだけです.とりあえず,私の環境では動作を確認できました.動くという保証はありませんが….
慣れた言語が使えるとなれば,メモリも限界まで有効活用したくなるところですが,(現在のところ)Mapper の並列数は 2-8,Reducer の並列数は 1-4 となっているようです.メモリ不足にはご注意ください.
- Mapper と Reducer の並列数について
追記(2009-09-18):scrp になっていた部分を scp に修正しました.