2011-11-11 25 views
9

AmazonのElastic MapReduceでmrjobを使用してPythonコードを実行すると、EMRイメージのnumpyとscipyをアップグレードする方法が見つかりました。Amazon Elastic MapReduceのNumpyとScipy

は、次のコマンドは動作し、コンソールから実行:

tar -cvf py_bundle.tar mymain.py Utils.py numpy-1.6.1.tar.gz scipy-0.9.0.tar.gz 

    gzip py_bundle.tar 

    python my_mapper.py -r emr --python-archive py_bundle.tar.gz --bootstrap-python-package numpy-1.6.1.tar.gz --bootstrap-python-package scipy-0.9.0.tar.gz > output.txt 

これが成功イメージに最新のnumpyのscipyのダウンロードとをブートストラップし、完璧に動作します。私の質問はスピードの問題です。小さなインスタンスに自分自身をインストールするには、21分かかります。

誰かがアップグレードのプロセスをスピードアップする方法を知っていますか? numpyとscipy?

+0

あなたの問題は、それが遅い小さなインスタンスだということです。より大きなAmazonインスタンスに移動しない限り、実際のスピードアップは表示されません。これは、EC2がインスタンスをまったく回転させるために通常必要とする約5-6分を21分以上上回っていますか? – ely

+1

元のスピンアップとの通信には長い時間がかかります。 mrjobコミュニティの誰かが、このインストールをワーカーインスタンス用に行い、sshを使用してワーカーインスタンスにログインし、完成したインストールディレクトリをダウンロードすることをお勧めしました。それから、完成したインストールディレクトリを私のファイルのzipとして渡します。 Pythonは、hadoopのインストールされたバージョンの代わりにローカルのNumPyとSciPyを使用することを選択します。 – jtman

答えて

5

EMRイメージに対して何かを行う唯一の方法は、ブートストラップアクションを使用することです。これをコンソールから実行すると、処理を行うタスクノードではなくマスターノードのみが変更されます。ブートストラップアクションは、起動時にすべてのノードで一度だけ実行され、シェルのexec'dを取得する簡単なスクリプトにすることができます。

elastic-mapreduce --create --bootstrap-action "s3://bucket/path/to/script" ... 

EMRイメージの変更を高速化するには、インストール後のファイルをtar upしてS3にアップロードします。次に、ブートストラップアクションを使用してダウンロードして展開します。 32ビット(マイクロ、スモール、ミディアム)および64ビットマシン用に別々のアーカイブを保管する必要があります。スクリプトでS3からダウンロードする

コマンドは次のとおりです。

hadoop fs -get s3://bucket/path/to/archive /tmp/archive 
2

この質問への答えは、現在のnumpyのは、すでに今、EMRにインストールされていることです。

NumPyを利用可能なバージョンよりも新しいバージョンに更新する場合は、sudo yum -y install numpyを実行するスクリプト(ブートストラップアクションとして)を実行できます。その後、NumPyはすぐにインストールされます。

関連する問題