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

44
Evan Zamir 20 juil. 2015 à 22:41

3 réponses

Meilleure réponse

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 d'amorçage 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
43
noli 3 août 2015 à 17:00

Selon que vous utilisez Python 2 (par défaut dans EMR) ou Python 3, la commande pip install devrait être différente. Comme recommandé dans la réponse de noli, vous devez créer un script shell, le télécharger dans un compartiment dans S3 et l'utiliser comme Action Bootstrap.

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 le noyau pyspark3 ):

#!/bin/bash -xe
sudo pip-3.4 install your_package
5
Jonathan Taws 6 juil. 2018 à 12:34

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 étape Spark. 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 d'étincelle. J'espère que cela t'aides!

5
Craig F 25 juil. 2015 à 01:00