

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.

# Architecture
<a name="architecture"></a>

Le schéma suivant décrit l'architecture de la solution décrite dans ce guide. Une AWS Glue tâche lit les données d'un bucket [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html), un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer des données. Vous pouvez lancer la AWS Glue Spark SQL tâche par le biais de AWS Management Console, [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ou de l' AWS Glue API. La AWS Glue Spark SQL tâche traite les données brutes dans un compartiment Amazon S3, puis stocke les données traitées dans un autre compartiment.



![AWS Glue avec Spark SQL le traitement de données brutes dans un compartiment Amazon S3](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/spark-tuning-glue-emr/images/aws-glue-processing-S3-data.png)


À titre d'exemple, ce guide décrit une [AWS GlueSpark SQLtâche](https://docs.aws.amazon.com/glue/latest/dg/etl-jobs-section.html) de base, écrite dans Python et Spark SQL (PySpark). Cette AWS Glue tâche est utilisée pour démontrer les meilleures pratiques en matière de Spark SQL réglage. Bien que ce guide se concentre sur AWS Glue, les meilleures pratiques de ce guide s'appliquent également aux offres d'emploi [Amazon EMR. Spark SQL](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/jobs-spark.html)

Le schéma suivant décrit le cycle de vie d'une Spark SQL requête. Le Spark SQL Catalyst Optimizer génère un plan de requêtes. Un *plan de requête* est une série d'étapes, telles que des instructions, utilisées pour accéder aux données d'un système de base de données relationnelle SQL. Pour développer un plan de Spark SQL requêtes optimisé pour les performances, la première étape consiste à visualiser le `EXPLAIN` plan, à l'interpréter, puis à l'ajuster. Vous pouvez utiliser l'interface Spark SQL utilisateur (UI) ou le serveur d'Spark SQLhistorique pour visualiser le plan.



![Cycle de vie d'une Spark SQL requête pour créer un ensemble de données distribué résilient (RDD)](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/spark-tuning-glue-emr/images/spark-sql-query-lifecycle.png)


SparkCatalyst Optimizer convertit le plan de requête initial en un plan de requête optimisé comme suit :

1. **API d'analyse et déclaratives** — La phase d'analyse est la première étape. Le *plan logique non résolu*, dans lequel les objets référencés dans la requête SQL ne sont pas connus ou ne correspondent pas à une table d'entrée, est généré avec des attributs et des types de données indépendants. Le Spark SQL Catalyst Optimizer applique ensuite un ensemble de règles pour créer un plan logique. L'analyseur SQL peut générer un arbre de syntaxe abstraite SQL (AST) et le fournir comme entrée pour le plan logique. L'entrée peut également être un bloc de données ou un objet de jeu de données construit à l'aide d'une API. Le tableau suivant indique dans quels cas vous devez utiliser du SQL, des blocs de données ou des ensembles de données.  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/spark-tuning-glue-emr/architecture.html)

   Pour plus d'informations sur les types d'entrées, consultez les points suivants :
   + Une API de jeu de données fournit une version **typée**. Cela réduit les performances en raison de la forte dépendance à l'égard des fonctions lambda définies par l'utilisateur. Le RDD ou les ensembles de données sont typés de manière statique. Par exemple, lorsque vous définissez un RDD, vous devez fournir explicitement la définition du schéma.
   + Une API de trame de données fournit des opérations relationnelles **non typées**. Les trames de données sont typées dynamiquement. Comme pour RDD, lorsque vous définissez un bloc de données, le schéma reste le même. Les données sont toujours structurées. Toutefois, ces informations ne sont disponibles qu'au moment de l'exécution. Cela permet au compilateur d'écrire SQL-like des instructions et de définir de nouvelles colonnes à la volée. Par exemple, il peut ajouter des colonnes à un bloc de données existant sans avoir à définir une nouvelle classe pour chaque opération.
   + Une Spark SQL requête est évaluée pour détecter les erreurs de syntaxe et d'analyse pendant l'exécution, ce qui permet d'accélérer les temps d'exécution.

1. **Catalogue** : permet **Spark SQL**Apache Hive Metastore (HMS)de gérer les métadonnées des entités relationnelles persistantes, telles que les bases de données, les tables, les colonnes et les partitions.

1. **Optimisation** —**** L'optimiseur réécrit le plan de requête en utilisant l'heuristique et le coût. Il effectue les opérations suivantes pour produire un plan logique optimisé :

   1. Colonnes de pruneaux

   1. Utilise les prédicats vers le bas

   1. Réorganise les jointures

1. Les **plans physiques et le planificateur** — Spark SQL Catalyst Optimizer convertit le plan logique en un ensemble de plans physiques. Cela signifie qu'il convertit le *quoi* en *comment.*

1. **Plans physiques sélectionnés** — Spark SQL Catalyst Optimizer sélectionne le plan physique le plus rentable.

1. Plan de **requête optimisé : Spark SQL exécute le plan** de requête optimisé en termes de performances et de coûts. Spark SQL La gestion de la mémoire suit l'utilisation de la mémoire et répartit la mémoire entre les tâches et les opérateurs. Le moteur Spark SQL Tungsten peut améliorer considérablement l'efficacité de la mémoire et du processeur pour les Spark SQL applications. Il implémente également le traitement de modèles de données binaires et fonctionne directement sur les données binaires. Cela permet de contourner le besoin de désérialisation et de réduire considérablement les frais associés à la conversion et à la désérialisation des données.