Améliorez les noyaux avec des magic commandes dans EMR Studio - Amazon EMR

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.

Améliorez les noyaux avec des magic commandes dans EMR Studio

Présentation

EMR Studio et EMR Notebooks prennent en charge les commandes. magic Magicles commandes, ou magics, sont des améliorations apportées par le IPython noyau pour vous aider à exécuter et à analyser des données. IPythonest un environnement shell interactif construit avec Python.

Amazon EMR prend également en charge Sparkmagic un package qui fournit des commandes magic spécifiques aux noyaux liés à Spark (PySparknoyaux SparkR et Scala) et qui utilise Livy sur le cluster pour soumettre des tâches Spark.

Tant que vous avez un noyau Python dans votre bloc-notes EMR, vous pouvez utiliser des commandes magic. De même, tout noyau lié à Spark prend en charge les commandes Sparkmagic.

Les commandes Magic, également appelées magics, se déclinent en deux variétés :

  • magics des lignes : ces commandes magic sont désignées par un seul préfixe % et fonctionnent sur une seule ligne de code

  • magic des cellules : ces commandes magic sont désignées par un double préfixe %% et fonctionnent sur plusieurs lignes de code

Pour connaître toutes les Répertorier les commandes magic et Sparkmagics disponibles, consultez magic.

Considérations et restrictions

  • EMR sans serveur ne prend pas en charge %%sh pour exécuter spark-submit. Il ne prend pas en charge les magics de blocs-notes EMR.

  • Amazon EMR sur les clusters EKS ne prend pas en charge les commandes Sparkmagic pour EMR Studio. Cela est dû au fait que les noyaux Spark que vous utilisez avec des points de terminaison gérés sont intégrés à Kubernetes et ne sont pas pris en charge par Sparkmagic et Livy. Vous pouvez définir la configuration Spark directement dans l' SparkContext objet pour contourner le problème, comme le montre l'exemple suivant.

    spark.conf.set("spark.driver.maxResultSize", '6g')
  • Les magic commandes et actions suivantes sont interdites par AWS :

    • %alias

    • %alias_magic

    • %automagic

    • %macro

    • Modifier proxy_user avec %configure

    • Modifier KERNEL_USERNAME avec %env ou %set_env

Répertorier les commandes magic et Sparkmagic

Utilisez les commandes suivantes pour répertorier les commandes magic disponibles :

  • %lsmagic répertorie toutes les fonctions magic actuellement disponibles ;

  • %%help répertorie les fonctions magic liées à Spark actuellement disponibles fournies par le package Sparkmagic.

Utiliser %%configure pour configurer Spark

L'une des commandes Sparkmagic les plus utiles est la commande %%configure, qui configure les paramètres de création de session. Pour les paramètres conf, vous pouvez configurer n'importe quelle configuration Spark mentionnée dans la documentation de configuration d'Apache Spark.

Exemple Ajouter un fichier JAR externe à EMR Notebooks depuis le référentiel Maven ou Amazon S3

Vous pouvez utiliser l'approche suivante pour ajouter une dépendance à un fichier JAR externe à tout noyau lié à Spark pris en charge par Sparkmagic.

%%configure -f {"conf": { "spark.jars.packages": "com.jsuereth:scala-arm_2.11:2.0,ml.combust.bundle:bundle-ml_2.11:0.13.0,com.databricks:dbutils-api_2.11:0.0.3", "spark.jars": "s3://amzn-s3-demo-bucket/my-jar.jar" } }
Exemple : Configurer Hudi

Vous pouvez utiliser l'éditeur de bloc-notes pour configurer votre bloc-notes EMR afin d'utiliser Hudi.

%%configure { "conf": { "spark.jars": "hdfs://apps/hudi/lib/hudi-spark-bundle.jar,hdfs:///apps/hudi/lib/spark-spark-avro.jar", "spark.serializer": "org.apache.spark.serializer.KryoSerializer", "spark.sql.hive.convertMetastoreParquet":"false" } }

Utiliser %%sh pour exécuter spark-submit

La magic %%sh exécute des commandes shell dans un sous-processus sur une instance de votre cluster rattaché. Généralement, vous utilisez l'un des noyaux liés à Spark pour exécuter des applications Spark sur votre cluster attaché. Toutefois, si vous souhaitez utiliser un noyau Python pour soumettre une application Spark, vous pouvez utiliser la magic suivante, en remplaçant le nom du compartiment par le nom de votre compartiment en minuscules.

%%sh spark-submit --master yarn --deploy-mode cluster s3://amzn-s3-demo-bucket/test.py

Dans cet exemple, le cluster doit accéder à l'emplacement de s3://amzn-s3-demo-bucket/test.py, sinon la commande échouera.

Vous pouvez utiliser n'importe quelle commande Linux avec la magic %%sh. Si vous souhaitez exécuter des commandes Spark ou YARN, utilisez l'une des options suivantes pour créer un utilisateur Hadoop emr-notebook et accordez-lui les autorisations nécessaires pour exécuter les commandes :

Utiliser %%display pour visualiser les dataframes Spark

Vous pouvez utiliser la magic %%display pour visualiser une dataframe Spark. Pour utiliser cette magic, exécutez la commande suivante.

%%display df

Choisissez d'afficher les résultats sous forme de tableau, comme le montre l'image suivante.

Résultat de l'utilisation de la magic %%display qui affiche les résultats sous forme de tableau.

Vous pouvez également choisir de visualiser vos données à l'aide de cinq types de graphiques. Vous avez le choix entre des diagrammes circulaires, des diagrammes de dispersion, des diagrammes linéaires, des diagrammes de surface et des diagrammes à barres.

Résultat de l'utilisation de la magic %%display qui affiche les résultats sous forme de diagramme.

Utiliser les magics des blocs-notes EMR

Amazon EMR fournit les magics des blocs-notes EMR suivantes ; vous pouvez les utiliser avec les noyaux basés sur Python3 et Spark :

  • %mount_workspace_dir : monte votre répertoire Workspace sur votre cluster afin que vous puissiez importer et exécuter du code à partir d'autres fichiers de votre Workspace

    Note

    Avec %mount_workspace_dir, seul le noyau Python 3 peut accéder à vos systèmes de fichiers locaux. Les exécuteurs Spark n'auront pas accès au répertoire monté avec ce noyau.

  • %umount_workspace_dir : démonte votre répertoire Workspace de votre cluster

  • %generate_s3_download_url : génère un lien de téléchargement temporaire dans la sortie de votre bloc-notes pour un objet Amazon S3

Prérequis

Avant d'installer les magics des blocs-notes EMR, effectuez les tâches suivantes :

  • Assurez-vous que votre Rôle de service pour les EC2 instances de cluster (profil d'EC2instance) dispose d'un accès en lecture pour Amazon S3. Le EMR_EC2_DefaultRole avec la politique gérée AmazonElasticMapReduceforEC2Role répond à cette exigence. Si vous utilisez une politique ou un rôle personnalisés, assurez-vous qu'ils disposent des autorisations S3 nécessaires.

    Note

    EMR magic Notebooks s'exécute sur un cluster en tant qu'utilisateur du bloc-notes et utilise EC2 le profil d'instance pour interagir avec Amazon S3. Lorsque vous montez un répertoire Workspace sur un cluster EMR, tous les Workspaces et blocs-notes EMR autorisés à se connecter à ce cluster peuvent accéder au répertoire monté.

    Les répertoires sont montés en lecture seule par défaut. Bien que s3fs-fuse et goofys autorisent les montages en lecture-écriture, nous vous recommandons vivement de ne pas modifier les paramètres de montage pour monter des répertoires en mode lecture-écriture. Si vous autorisez l'accès en écriture, toutes les modifications apportées au répertoire sont enregistrées dans le compartiment S3. Pour éviter la suppression ou le remplacement accidentels, vous pouvez activer la gestion des versions pour votre compartiment S3. Pour plus d'informations, consultez Utilisation de la gestion des versions dans les compartiments S3.

  • Exécutez l'un des scripts suivants sur votre cluster pour installer les dépendances pour les magics des blocs-notes EMR. Pour exécuter un script, vous pouvez Utilisation d'actions d'amorçage personnalisées ou suivre les instructions de la section Exécuter des commandes et des scripts sur un cluster Amazon EMR lorsque vous avez déjà un cluster en cours d'exécution.

    Vous pouvez choisir la dépendance à installer. s3fs-fuse et goofys sont tous deux des outils FUSE (système de fichiers dans l'espace utilisateur) qui vous permettent de monter un compartiment Amazon S3 en tant que système de fichiers local sur un cluster. L'outil s3fs fournit une expérience similaire à POSIX. L'outil goofys est un bon choix lorsque vous préférez les performances à un système de fichiers compatible POSIX.

    La série Amazon EMR 7.x utilise Amazon Linux 2023, qui ne prend pas en charge les référentiels EPEL. Si vous utilisez Amazon EMR 7.x, suivez les instructions d'installation de GitHubs3fs-fuse. s3fs-fuse Si vous utilisez les séries 5.x ou 6.x, utilisez les commandes suivantes pour effectuer l'installation. s3fs-fuse

    #!/bin/sh # Install the s3fs dependency for EMR Notebooks magics sudo amazon-linux-extras install epel -y sudo yum install s3fs-fuse -y

    OU

    #!/bin/sh # Install the goofys dependency for EMR Notebooks magics sudo wget https://github.com/kahing/goofys/releases/latest/download/goofys -P /usr/bin/ sudo chmod ugo+x /usr/bin/goofys

Installer les magics des blocs-notes EMR

Note

Avec les versions 6.0 à 6.9.0 et 5.0 à 5.36.0 d'Amazon EMR, seules les versions 0.2.0 emr-notebooks-magics et supérieures du package sont compatibles avec la magic %mount_workspace_dir.

Pour installer les magics des blocs-notes EMR, complétez les étapes suivantes.

  1. Dans votre bloc-notes, exécutez les commandes suivantes pour installer le package emr-notebooks-magics.

    %pip install boto3 --upgrade %pip install botocore --upgrade %pip install emr-notebooks-magics --upgrade
  2. Redémarrez votre noyau pour charger les magics des blocs-notes EMR.

  3. Vérifiez votre installation à l'aide de la commande suivante, qui devrait afficher le texte d'aide de sortie pour %mount_workspace_dir.

    %mount_workspace_dir?

Montez un répertoire Workspace avec %mount_workspace_dir

La magic %mount_workspace_dir vous permet de monter votre répertoire d'espace de travail sur votre cluster EMR afin de pouvoir importer et exécuter d'autres fichiers, modules ou packages stockés dans votre répertoire.

L'exemple suivant monte l'intégralité du répertoire Workspace sur un cluster et spécifie l'argument facultatif <--fuse-type> qui permet d'utiliser goofys pour monter le répertoire.

%mount_workspace_dir . <--fuse-type goofys>

Pour vérifier que votre répertoire Workspace est monté, utilisez l'exemple suivant pour afficher le répertoire de travail actuel avec la commande ls. La sortie doit afficher tous les fichiers de votre Workspace.

%%sh ls

Lorsque vous avez terminé d'apporter des modifications à votre Workspace, vous pouvez démonter le répertoire du Workspace à l'aide de la commande suivante :

Note

Le répertoire de votre Workspace reste monté sur votre cluster même lorsque le Workspace est arrêté ou détaché. Vous devez démonter explicitement votre répertoire Workspace.

%umount_workspace_dir

Télécharger un objet Amazon S3 avec %generate_s3_download_url

La commande generate_s3_download_url crée une URL présignée pour un objet stocké dans Amazon S3. Vous pouvez utiliser l'URL présignée pour télécharger l'objet sur votre ordinateur local. Par exemple, vous pouvez exécuter generate_s3_download_url pour télécharger le résultat d'une requête SQL que votre code écrit sur Amazon S3.

L'URL présignée est valide pendant 60 minutes par défaut. Vous pouvez modifier le délai d'expiration en spécifiant un nombre de secondes pour le drapeau --expires-in. Par exemple, --expires-in 1800 crée une URL valide pendant 30 minutes.

L'exemple suivant génère un lien de téléchargement pour un objet en spécifiant le chemin complet d'Amazon S3 : s3://EXAMPLE-DOC-BUCKET/path/to/my/object.

%generate_s3_download_url s3://EXAMPLE-DOC-BUCKET/path/to/my/object

Pour en savoir plus sur l'utilisation de generate_s3_download_url, exécutez la commande suivante pour afficher le texte d'aide.

%generate_s3_download_url?

Exécuter un bloc-notes en mode sans tête avec %execute_notebook

Grâce à la magic %execute_notebook, vous pouvez exécuter un autre bloc-notes en mode sans tête et afficher le résultat de chaque cellule que vous avez exécutée. Cela magic nécessite des autorisations supplémentaires pour le rôle d'instance partagé par Amazon EMR et Amazon EC2 . Pour plus de détails sur la façon d'accorder des autorisations supplémentaires, exécutez la commande%execute_notebook?.

Au cours d'un travail de longue durée, votre système peut se mettre en veille pour cause d'inactivité ou perdre temporairement la connexion Internet. Cela peut perturber la connexion entre votre navigateur et le serveur Jupyter. Dans ce cas, vous risquez de perdre le résultat des cellules que vous avez exécutées et envoyées depuis le serveur Jupyter.

Si vous utilisez le bloc-notes en mode sans tête avec la magic %execute_notebook, le bloc-notes EMR capture les données des cellules qui ont fonctionné, même si le réseau local est perturbé. EMR Notebooks enregistre la sortie de manière incrémentielle dans un nouveau bloc-notes portant le même nom que le bloc-notes que vous avez utilisé. EMR Notebooks place ensuite le bloc-notes dans un nouveau dossier au sein du Workspace. Les exécutions sans tête se produisent sur le même cluster et utilisent le rôle de service EMR_Notebook_DefaultRole, mais des arguments supplémentaires peuvent modifier les valeurs par défaut.

Pour exécuter un bloc-notes en mode sans tête, utilisez la commande suivante :

%execute_notebook <relative-file-path>

Pour spécifier un ID de cluster et un rôle de service pour une exécution en mode sans tête, utilisez la commande suivante :

%execute_notebook <notebook_name>.ipynb --cluster-id <emr-cluster-id> --service-role <emr-notebook-service-role>

Lorsqu'Amazon EMR et Amazon EC2 partagent un rôle d'instance, ce rôle nécessite les autorisations supplémentaires suivantes :

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:StartNotebookExecution", "elasticmapreduce:DescribeNotebookExecution", "ec2:DescribeInstances" ], "Resource": [ "*" ], "Sid": "AllowELASTICMAPREDUCEStartnotebookexecution" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/EMR_Notebooks_DefaultRole" ], "Sid": "AllowIAMPassrole" } ] }
Note

Pour utiliser la magic %execute_notebook, installez le package emr-notebooks-magics, version 0.2.3 ou supérieure.