Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Installation de noyaux et de bibliothèques supplémentaires
Lorsque vous créez un cluster JupyterHub sur AmazonEMR, le noyau Python 3 par défaut pour Jupyter ainsi que les noyaux Spark PySpark et Sparkmagic sont installés sur le conteneur Docker. Vous pouvez installer des noyaux supplémentaires. Vous pouvez également installer des bibliothèques et des packages supplémentaires, puis les importer pour le shell approprié.
Installation d'un noyau
Les noyaux sont installés dans le conteneur Docker. La manière la plus simple de faire cela consiste à créer un script bash avec des commandes d'installation, de l'enregistrer sur le nœud principal, puis d'utiliser la commande sudo docker exec jupyterhub
pour exécuter le script dans le conteneur script_name
jupyterhub
. L'exemple de script suivant installe le noyau, puis installe quelques bibliothèques pour ce noyau sur le nœud principal afin que vous puissiez ultérieurement importer les bibliothèques à l'aide du noyau dans Jupyter.
#!/bin/bash # Install Python 2 kernel conda create -n py27 python=2.7 anaconda source /opt/conda/envs/py27/bin/activate apt-get update apt-get install -y gcc /opt/conda/envs/py27/bin/python -m pip install --upgrade ipykernel /opt/conda/envs/py27/bin/python -m ipykernel install # Install libraries for Python 2 /opt/conda/envs/py27/bin/pip install paramiko nltk scipy numpy scikit-learn pandas
Pour installer le noyau et les bibliothèques dans le conteneur, ouvrez une connexion terminale sur le nœud principal, enregistrez le script sous /etc/jupyter/install_kernels.sh
, et exécutez la commande suivante sur la ligne de commande du nœud principal :
sudo docker exec jupyterhub bash /etc/jupyter/install_kernels.sh
Utilisation des bibliothèques et installation de bibliothèques supplémentaires
Un ensemble essentiel de bibliothèques d'apprentissage automatique et de science des données pour Python 3 est préinstallé JupyterHub sur AmazonEMR. Vous pouvez utiliser sudo docker exec jupyterhub bash -c "conda list"
et sudo docker exec jupyterhub bash -c "pip freeze"
.
Si une tâche Spark a besoin de bibliothèques sur les nœuds de travail, nous vous recommandons d'utiliser une action d'amorçage pour exécuter un script afin d'installer les bibliothèques lorsque vous créez le cluster. Les actions d'amorçage s'exécutent sur tous les nœuds du cluster pendant le processus de création du cluster, ce qui simplifie l'installation. Si vous installez des bibliothèques sur des nœuds principaux/de travail une fois que le cluster est en cours d'exécution, l'opération est plus complexe. Dans cette section, nous fournissons un exemple de programme Python qui montre comment installer ces bibliothèques.
Les exemples d'action d'amorçage et de programme Python illustrés dans cette section utilisent un script bash enregistré dans Amazon S3 pour installer les bibliothèques sur tous les nœuds.
Le script référencé dans l'exemple suivant utilise pip
pour installer paramiko, nltk, scipy, scikit-learn et pandas pour le noyau Python 3 :
#!/bin/bash sudo python3 -m pip install boto3 paramiko nltk scipy scikit-learn pandas
Après avoir créé le script, chargez-le dans un emplacement dans Amazon S3 par exemple, s3://amzn-s3-demo-bucket/install-my-jupyter-libraries.sh
. Pour plus d'informations, consultez la section Chargement d'objets dans le Guide de l'utilisateur Amazon Simple Storage Service afin de pouvoir les utiliser dans votre action de démarrage ou dans votre programme Python.
Pour spécifier une action d'amorçage qui installe des bibliothèques sur tous les nœuds lorsque vous créez un cluster à l'aide du AWS CLI
Créez un script semblable à l'exemple précédent et enregistrez-le dans un emplacement dans Amazon S3. Nous utilisons l'exemple
s3://amzn-s3-demo-bucket/install-my-jupyter-libraries.sh
.Créez le cluster avec JupyterHub et utilisez l'
Path
argument de l'--bootstrap-actions
option pour spécifier l'emplacement du script, comme indiqué dans l'exemple suivant :Note
Les caractères de continuation de ligne Linux (\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).
aws emr create-cluster --name="
MyJupyterHubCluster
" --release-label emr-5.36.2 \ --applications Name=JupyterHub --log-uris3://amzn-s3-demo-bucket/MyJupyterClusterLogs
\ --use-default-roles --instance-type m5.xlarge --instance-count2
--ec2-attributes KeyName=MyKeyPair
\ --bootstrap-actions Path=s3://amzn-s3-demo-bucket/install-my-jupyter-libraries.sh
,Name=InstallJupyterLibs
Pour spécifier une action d'amorçage qui installe des bibliothèques sur tous les nœuds lorsque vous créez un cluster à l'aide de la console
Accédez à la nouvelle EMR console Amazon et sélectionnez Basculer vers l'ancienne console dans la navigation latérale. Pour plus d'informations sur ce qu'implique le passage à l'ancienne console, consultez la rubrique Utilisation de l'ancienne console.
-
Choisissez Créer un cluster et Go to advanced options (Aller aux options avancées).
Spécifiez les paramètres pour Software and Steps (Logiciel et étapes) et Hardware (Matériel) selon les besoins de votre application.
Sur l'écran General Cluster Settings (Paramètres généraux de cluster), développez Bootstrap Actions (Actions d'amorçage).
Pour Add bootstrap action (Ajouter une action d'amorçage), sélectionnez Custom action (Action personnalisée), Configure and add (Configurer et ajouter).
Pour Name (Nom), saisissez un nom convivial. Pour Emplacement du script, entrez l'emplacement de votre script dans Amazon S3 (l'exemple que nous utilisons est s3://amzn-s3-demo-bucket/ install-my-jupyter-libraries .sh). Laissez les Optional arguments (Arguments facultatifs) vides et choisissez Add (Ajouter).
Spécifiez les autres paramètres de votre cluster, puis choisissez Next (Suivant).
Spécifiez les paramètres de sécurité, puis choisissez Create cluster (Créer le cluster).
Exemple Installation de bibliothèques sur les nœuds principaux d'un cluster en cours d'exécution
Après avoir installé des bibliothèques sur le nœud principal à partir de Jupyter, vous pouvez installer des bibliothèques sur les nœuds principaux en cours d'exécution de diverses manières. L'exemple suivant présente un programme Python écrit pour s'exécuter sur une machine locale. Lorsque vous exécutez le programme Python localement, il utilise le symbole AWS-RunShellScript
de AWS Systems Manager pour exécuter l'exemple de script, présenté plus haut dans cette section, qui installe des bibliothèques sur les nœuds principaux du cluster.
import argparse import time import boto3 def install_libraries_on_core_nodes(cluster_id, script_path, emr_client, ssm_client): """ Copies and runs a shell script on the core nodes in the cluster. :param cluster_id: The ID of the cluster. :param script_path: The path to the script, typically an Amazon S3 object URL. :param emr_client: The Boto3 Amazon EMR client. :param ssm_client: The Boto3 AWS Systems Manager client. """ core_nodes = emr_client.list_instances( ClusterId=cluster_id, InstanceGroupTypes=["CORE"] )["Instances"] core_instance_ids = [node["Ec2InstanceId"] for node in core_nodes] print(f"Found core instances: {core_instance_ids}.") commands = [ # Copy the shell script from Amazon S3 to each node instance. f"aws s3 cp {script_path} /home/hadoop", # Run the shell script to install libraries on each node instance. "bash /home/hadoop/install_libraries.sh", ] for command in commands: print(f"Sending '{command}' to core instances...") command_id = ssm_client.send_command( InstanceIds=core_instance_ids, DocumentName="AWS-RunShellScript", Parameters={"commands": [command]}, TimeoutSeconds=3600, )["Command"]["CommandId"] while True: # Verify the previous step succeeded before running the next step. cmd_result = ssm_client.list_commands(CommandId=command_id)["Commands"][0] if cmd_result["StatusDetails"] == "Success": print(f"Command succeeded.") break elif cmd_result["StatusDetails"] in ["Pending", "InProgress"]: print(f"Command status is {cmd_result['StatusDetails']}, waiting...") time.sleep(10) else: print(f"Command status is {cmd_result['StatusDetails']}, quitting.") raise RuntimeError( f"Command {command} failed to run. " f"Details: {cmd_result['StatusDetails']}" ) def main(): parser = argparse.ArgumentParser() parser.add_argument("cluster_id", help="The ID of the cluster.") parser.add_argument("script_path", help="The path to the script in Amazon S3.") args = parser.parse_args() emr_client = boto3.client("emr") ssm_client = boto3.client("ssm") install_libraries_on_core_nodes( args.cluster_id, args.script_path, emr_client, ssm_client ) if __name__ == "__main__": main()