2015-07-20 4 views

Antwort

22

Der einfachste Weg wäre, ein Bash-Skript mit Ihren Installationsbefehlen zu erstellen, es in S3 zu kopieren und eine Bootstrap-Aktion von der Konsole aus auf Ihr Skript zu setzen.

Hier ist ein Beispiel, das ich in der Produktion bin:

s3: //mybucket/bootstrap/install_python_modules.sh

#!/bin/bash -xe 

# Non-standard and non-Amazon Machine Image Python modules: 
sudo pip install -U \ 
    awscli   \ 
    boto    \ 
    ciso8601   \ 
    ujson    \ 
    workalendar 

sudo yum install -y python-psycopg2 
+0

wird installieren die Pakete auf einem der Knoten im EMR-Cluster. Wie kann ich sicherstellen, dass das Paket auf allen Knoten installiert wird? – Aliza

+1

Dies installiert die Pakete auf allen Knoten – noli

4

Kurz gesagt, gibt es zwei Möglichkeiten, Pakete mit Pip zu installieren, abhängig von der Plattform. Zuerst installieren Sie, was Sie brauchen, und dann können Sie Ihren Spark-Schritt ausführen. Am einfachsten ist es emr-4.0.0 und ‚Befehl runner.jar‘ zu verwenden:

from boto.emr.step import JarStep 
>>> pip_step=JarStep(name="Command Runner", 
...    jar="command-runner.jar", 
...    action_on_failure="CONTINUE", 
...    step_args=['sudo','pip','install','arrow'] 
...) 
>>> spark_step=JarStep(name="Spark with Command Runner", 
...     jar="command-runner.jar", 
...     step_args=["spark-submit","/usr/lib/spark/examples/src/main/python/pi.py"] 
...     action_on_failure="CONTINUE" 
) 
>>> step_list=conn.add_jobflow_steps(emr.jobflowid, [pip_step,spark_step]) 

auf 2.x und 3.x, verwenden Sie Skript-runner.jar in ähnlicher Weise, außer, dass Sie um den vollständigen URI für scriptrunner anzugeben.

EDIT: Sorry, ich habe nicht gesehen, dass Sie dies über die Konsole tun wollten. Sie können die gleichen Schritte auch in der Konsole hinzufügen. Der erste Schritt wäre eine Kunden-JAR mit den gleichen Argumenten wie oben. Der zweite Schritt ist ein Funkensprung. Hoffe das hilft!

+0

wo kommt 'dieses conn' kommen aus –

Verwandte Themen