2011-11-11 10 views
9

Utilizzando il mrjob per eseguire il codice Python su Amazon Elastic MapReduce ho trovato con successo un modo per aggiornare l'immagine EMP numpy e scipy.Numpy and Scipy con Amazon Elastic MapReduce

Esecuzione da console i seguenti comandi funzionano:

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 

Questa bootstrap con successo l'ultima NumPy e SciPy nell'immagine e funziona perfettamente. La mia domanda è una questione di velocità. Questo richiede 21 minuti per installarsi su una piccola istanza.

Qualcuno ha idea di come accelerare il processo di aggiornamento di numpy e scipy ?

+0

Il tuo problema è che è la piccola istanza che è lenta. Penso che non vedrai alcuna reale accelerazione a meno che non ti sposti in istanze Amazon più grandi. Questo è di 21 minuti al di sopra dei ~ 5-6 minuti che normalmente richiede all'EC2 di far girare le istanze? – ely

+1

Concordo sul fatto che la comunicazione con lo spin up originale richieda molto tempo. Qualcuno nella comunità mrjob ha consigliato di eseguire questa installazione per un'istanza di lavoro, quindi di utilizzare ssh per accedere all'istanza worker, scaricare la directory di installazione completata. Poi ho appena passato la directory di installazione completata come zip con i miei file. Python sceglie di utilizzare NumPy e SciPy locali invece delle versioni installate di hadoop. – jtman

risposta

5

L'unico modo per eseguire qualsiasi operazione su un'immagine EMR consiste nell'utilizzare le azioni di bootstrap. Fare questo dalla console significa che cambierai solo il nodo principale e non i nodi compito che eseguono l'elaborazione. Le azioni Bootstrap vengono eseguite una volta all'avvio su tutti i nodi e possono essere uno script semplice che ottiene shell exec.

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

Per accelerare le modifiche all'immagine EMR, tar i file di post-installati e caricare S3. Quindi utilizzare un'azione di bootstrap per scaricare e distribuire. Dovrai conservare archivi separati per macchine a 32 bit (micro, piccole, medie) e a 64 bit.

Il comando per scaricare da S3 nello script è:

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

La risposta attuale a questa domanda è che NumPy è già installato sul EMR, ora.

Se si desidera aggiornare NumPy a una versione più recente rispetto a quella disponibile, è possibile eseguire uno script (come azione di bootstrap) che fa sudo yum -y install numpy. NumPy viene quindi installato in pochissimo tempo.