web-dev-qa-db-fra.com

Comment bootstrap installation des modules Python sur Amazon EMR?)

Je veux faire quelque chose de vraiment basique, il suffit de lancer un cluster Spark via la console EMR et d'exécuter un script Spark qui dépend d'un Python (par exemple, Flèche ). Quelle est la manière la plus simple de procéder?

29
Evan Zamir

La façon la plus simple serait de créer un script bash contenant vos commandes d'installation, de le copier sur S3 et de définir une action bootstrap depuis la console pour pointer vers votre script.

Voici un exemple que j'utilise en production:

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
36
noli

En bref, il existe deux façons d'installer des packages avec pip, selon la plate-forme. Tout d'abord, vous installez tout ce dont vous avez besoin, puis vous pouvez exécuter votre Spark étape. Le plus simple est d'utiliser emr-4.0.0 et 'command-runner.jar':

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])

Sur 2.x et 3.x, vous utilisez script-runner.jar de la même manière, sauf que vous devez spécifier l'URI complet pour scripttrunner .

EDIT: Désolé, je n'ai pas vu que vous vouliez le faire via la console. Vous pouvez également ajouter les mêmes étapes dans la console. La première étape serait un JAR client avec les mêmes arguments que ci-dessus. La deuxième étape est une étape spark. J'espère que cela vous aidera!

4
Craig F

Selon que vous utilisez Python 2 (par défaut dans EMR) ou Python 3, la commande pip install doit être différente. Comme recommandé dans noli's answer , vous devez créer un script Shell, le télécharger dans un compartiment dans S3 et l'utiliser comme action d'amorçage .

Pour Python 2 (dans Jupyter: utilisé par défaut pour le noyau pyspark):

#!/bin/bash -xe
Sudo pip install your_package

Pour Python 3 (dans Jupyter: utilisé par défaut pour Python 3 et pyspark3 noyau):

#!/bin/bash -xe
Sudo pip-3.4 install your_package
3
Jonathan Taws