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.
Comprendre les journaux rédigés
AWS Clean Rooms rédige les journaux Spark avant de les exporter afin que les journaux exportés ne révèlent pas le contenu des données d'un membre ou n'identifient pas la table et les emplacements de stockage des données sources. AWS Clean Rooms reconstruit les enregistrements du journal et émet uniquement les champs dont le partage est connu pour être sûr. Certaines informations sont conservées délibérément, notamment les noms des colonnes lues par une requête.
La rédaction ne fait pas de distinction entre les membres. Attendez-vous à ce que les noms de vos tables et les valeurs de vos requêtes soient supprimés des journaux que vous exportez pour vos propres requêtes, dans les mêmes conditions que les informations des autres membres. Les champs vides et les espaces réservés sont normaux et n'indiquent aucun problème d'exportation.
Ce que contiennent les journaux exportés
Les journaux exportés conservent les informations nécessaires au diagnostic des défaillances et des problèmes de performances :
-
Horaires : les durées des tâches et des étapes, le temps d'exécution, le temps du processeur, le temps de collecte des déchets, le temps de désérialisation et de sérialisation des résultats, le temps d'attente du shuffle et le temps d'écriture du shuffle sont tous exactement préservés. Les chronométrages constituent le principal signal pour l'analyse des performances.
-
Identifiants et comptes d'exécution Spark : ID des tâches, des étapes, des tâches et des tentatives, nombre de partitions, comptes de tâches, ID d'exécuteur, noms d'hôtes et ports.
-
Structure du plan de requête : arborescence du plan physique, y compris les noms d'opérateurs tels que
HashAggregateSortMergeJoinExchange, et, afin que vous puissiez voir la forme du plan et la manière dont le moteur a choisi d'exécuter votre requête. Un nom d'opérateur qui n'est pas propre à Spark apparaît sous la forme[REDACTED]. -
Noms des colonnes sources : noms de colonnes provenant d'une table en cours d'analyse, afin que vous puissiez voir quelles colonnes sont utilisées dans les filtres, les jointures et les agrégations. Les noms créés par une requête, tels qu'un alias, ne sont pas conservés. Pour de plus amples informations, veuillez consulter Comment les noms de colonnes et de tables sont traités.
-
Type de numérisation et format de fichier : un opérateur de numérisation inclut généralement le nom de la table en cours de lecture. Le nom est remplacé par un formulaire qui identifie uniquement le type de numérisation et le format de fichier, par exemple
Scan parquet, afin que vous puissiez toujours savoir comment les données sont lues. Si le format de fichier n'est pas AWS Clean Rooms reconnu, l'opérateur apparaît commeScanétant sans format. -
Classes d'erreur : lorsqu'une requête échoue, les journaux identifient le type d'erreur, mais pas les données qui l'ont provoquée. Ils signalent la classe d'erreur de Spark, son code SQLSTATE et le message standard que Spark définit pour cette classe, les
<placeholder>jetons du message étant laissés vides, car les valeurs qui les rempliraient proviennent des données. Un transfert qui a échoué, par exemple, génère des rapports[CAST_INVALID_INPUT]et un message décrivant qu'une valeur d'un type ne peut pas être convertie en un autre, sans afficher la valeur. Lorsqu'une panne en entraîne une autre, les classes d'erreur de la chaîne sont signalées ensemble, jusqu'à quelques niveaux. Une panne qui ne provient pas de Spark est signalée uniquement comme une erreur non liée à Spark, sans classe.Les échecs de tâches individuelles ne signalent que le type d'échec, par exemple
ExceptionFailure. Ils ne possèdent pas de classe d'erreur qui leur est propre. -
Configuration Spark : paramètres dont les valeurs sont toujours des nombres, des tailles ou des mots clés fixes, et qui sont le plus souvent nécessaires pour diagnostiquer un problème de performances : cœurs et mémoire du pilote et de l'exécuteur, fractions de mémoire et paramètres hors tas, paramètres d'allocation dynamique, paramètres d'exécution des requêtes adaptatifs, parallélisme par défaut et nombre de partitions aléatoires, seuil de jointure de diffusion, taille de partition maximale, paramètres de compression aléatoire, mode planificateur et sérialiseur. La plupart des autres configurations sont expurgées, car les paramètres peuvent contenir des chemins, des identifiants et du texte de requête. L'un de ces paramètres est également omis si sa valeur n'est pas un simple chiffre, une taille ou un mot clé.
-
Utilisation de la mémoire et volumes de données : mémoire d'exécution maximale, perte de mémoire et de disque, mémoire JVM de l'exécuteur, tailles des données mises en cache, nombre de blocs de lecture aléatoire et nombre d'octets et d'enregistrements lus et écrits, y compris les volumes de lecture et d'écriture aléatoires. Ces chiffres sont arrondis à la baisse plutôt qu'exacts. Pour de plus amples informations, veuillez consulter En quoi les journaux expurgés diffèrent-ils des journaux Spark standard.
-
Pourquoi un exécuteur s'est arrêté : catégorie pour chaque exécuteur qui s'est arrêté, par exemple parce qu'il manque de mémoire, qu'il a été arrêté par le pilote, qu'il a été mis hors service ou qu'il n'a pas répondu. C'est souvent le moyen le plus rapide d'expliquer pourquoi une requête a échoué. Les journaux enregistrent également tout exécuteur ou hôte sur lequel Spark a arrêté de planifier le travail, ce qui est utile lorsque les pannes se reproduisent au même endroit. Pour de plus amples informations, veuillez consulter En quoi les journaux expurgés diffèrent-ils des journaux Spark standard.
-
Détail de l'échec de l'extraction aléatoire : lorsqu'une tâche ne peut pas récupérer une sortie aléatoire, les identifiants shuffle, map, map index et reduce sont préservés, ainsi que l'exécuteur et l'hôte sur lesquels l'extraction a été tentée. Cela vous permet de distinguer les défaillances répétées concernant une seule source, ce qui indique généralement un exécuteur qui ne répond pas, des défaillances réparties sur de nombreuses sources, qui indiquent généralement des problèmes de réseau transitoires.
Ce qui est expurgé
-
Valeurs de données : valeurs littérales issues de votre requête et valeurs de données provenant de n'importe quelle table. Un prédicat de filtre indique quelle colonne a été filtrée mais pas la valeur à laquelle elle a été comparée.
-
Noms des tables et emplacements de stockage : identificateurs de tables, noms de bases de données et chemins Amazon S3.
-
Texte de la requête : instruction SQL et toute description associée à la requête.
-
Texte du message d'erreur et traces de pile : étant donné qu'un message d'erreur peut citer la valeur à l'origine de l'erreur, le texte du message et les traces de pile sont supprimés. Le nom de la classe d'exceptions sous-jacente est également supprimé, car une exception levée par une fonction définie par l'utilisateur porte un nom choisi par l'auteur de la requête. La classe d'erreur Spark est préservée à la place, pour la requête et la tâche. La raison pour laquelle une étape a échoué et la raison pour laquelle une tâche a été supprimée sont également supprimées.
-
Noms que Spark enregistre pour son propre travail : noms et sites d'appel des stages et des ensembles de données mis en cache, ainsi que le nom de l'application. Il s'agit de champs en texte libre qui peuvent faire écho à un nom de table ou à un chemin de stockage. Dans Spark History Server, les étapes apparaissent donc sans les descriptions qui les identifieraient normalement, et vous localisez une étape par son identifiant et sa place dans le plan.
-
Noms de colonnes calculés et aliasés : noms créés par une requête au lieu de les lire dans une table, car le moteur de requête génère un tel nom à partir de l'expression et ce nom peut contenir une valeur. Ils apparaissent sous la forme d'un identifiant numérique tel que
#42. Pour de plus amples informations, veuillez consulter Comment les noms de colonnes et de tables sont traités. -
Détail du scan : schéma de lecture, prédicats de filtre appliqués à chaque scan (filtres déroulants, filtres de partition et filtres de données) et emplacement des données.
-
Liens vers les journaux du pilote et de l'exécuteur : URL des journaux que Spark enregistre pour chaque exécuteur et pour le pilote. Dans Spark History Server, les liens qui ouvriraient normalement le journal d'un pilote ou d'un exécuteur ne sont pas renseignés.
-
Identifiants de ressources et points de terminaison des services : ID de AWS compte, ARN tels que ceux des rôles et des AWS KMS clés IAM, et URL des points de terminaison des services qui AWS Clean Rooms appellent pour exécuter votre requête.
-
AWS détails du service : noms AWS Clean Rooms de classe, entrées de chemin de classe, configuration de la JVM, propriétés de Hadoop et du système. Les propriétés des tâches sont également supprimées, à l'exception des identifiants dont Spark History Server a besoin pour associer les tâches à l'exécution de la requête à laquelle elles appartiennent.
Comment les noms de colonnes et de tables sont traités
Les journaux exportés conservent les noms des colonnes lues par une requête. Les noms de tables et les alias de colonne créés dans la requête sont supprimés. Le nom créé par une requête est généré à partir de l'expression qu'elle nomme, et ce nom généré peut contenir une valeur issue de la requête : SELECT 'confidential' produit une colonne nomméeconfidential. Un nom n'apparaît donc que lorsqu'il peut être retracé jusqu'à une colonne d'un tableau numérisé. Tous les autres noms sont remplacés par un identifiant numérique.
Par exemple, réfléchissez à la requête suivante.
SELECT user_id, SUM(amount) AS total FROM sales WHERE region = 'us-west' GROUP BY user_id
Les journaux exportés le représentent comme suit.
| Elément de la requête | Dans les journaux exportés |
|---|---|
Les colonnes user_idamount, et region |
Présenter par nom, afin que vous puissiez voir sur quoi la requête a été groupée, additionnée et filtrée |
La tablesales, sa base de données et son emplacement de stockage |
Absent |
La valeur 'us-west' |
Remplacé par [REDACTED] |
Le pseudonyme total |
Remplacé par un identifiant numérique, car la requête a créé le nom au lieu de le lire dans une table |
En quoi les journaux expurgés diffèrent-ils des journaux Spark standard
Le nombre de lignes et les volumes de données sont approximatifs
Le nombre d'enregistrements, les volumes d'octets, les tailles de débordement et les mesures de mémoire maximale sont arrondis à un ordre de grandeur inférieur, car un décompte exact peut révéler la taille des données d'un autre membre. Une tâche qui lit 1 342 enregistrements en rapporte 1 000. Les mesures inférieures à 100 indiquent 0.
Comme chaque chiffre est arrondi à la valeur inférieure, une tâche qui en rapporte 100 et une tâche qui en rapporte 1 000 peuvent avoir lu presque le même nombre d'enregistrements. Traitez les chiffres qui ne diffèrent que d'un ordre de grandeur avec prudence ; des différences plus importantes, telles que 1 000 contre 10 000 000, indiquent toujours de manière fiable une asymétrie.
Les valeurs censurées prennent plusieurs formes
Dans le plan de requête, une valeur caviardée apparaît sous forme de texte littéral. [REDACTED] Ailleurs dans les journaux, un champ expurgé est généralement vide. Il peut s'agir d'une chaîne vide, d'une liste vide ou d'une valeur totalement absente, afin que Spark History Server puisse toujours lire l'enregistrement. Les deux formes signifient la même chose.
Les plans de requête n'utilisent pas une syntaxe d'opérateur familière
Les expressions du plan sont écrites sous forme d'appels de fonction plutôt qu'en notation mathématique. Une comparaison apparaît sous la forme EqualTo(#12, [REDACTED]) plutôt que(a = 5). Les noms de fonctions apparaissent également dans ce formulaire, et les noms de fonctions définis par l'utilisateur n'apparaissent pas du tout.
Seul le plan physique est inclus
Les journaux exportés contiennent le plan physique. Ils ne contiennent pas les plans logiques analysés, analysés ou optimisés qui les accompagnent habituellement.
Per-task les métriques sont expurgées
Le graphique du plan répertorie les mesures communiquées par chaque opérateur, telles que le nombre de lignes de sortie. Les mesures rapportées par les différentes tâches n'ont aucune valeur, car les chiffres par tâche qui les sous-tendent sont supprimés. Pour les chiffres au niveau des tâches, utilisez plutôt les mesures par tâche dans la vue par étapes.
Les statistiques du pilote Spark sont arrondies à la valeur inférieure
Les métriques que Spark calcule sur le pilote, y compris celles pour les diffusions, les scans et les écritures, indiquent une valeur, mais celle-ci est arrondie à un ordre de grandeur inférieur pour la même raison que le nombre d'enregistrements et les volumes de données : un chiffre exact peut révéler la taille des données d'un autre membre.
Seul le journal des événements est exporté
L'export contient le journal des événements Spark. Il ne contient pas la sortie du pilote et de l'exécuteur de forme libre que Spark écrit à côté, car une seule ligne de cette sortie peut contenir un nom de table, un chemin de stockage ou une valeur de données. Le diagnostic doit être effectué à partir du journal des événements.
Les défaillances de l'exécuteur affichent des messages d'erreur génériques
Étant donné que la raison de l'arrêt d'un exécuteur peut contenir des informations détaillées sur le AWS Clean Rooms service, les journaux signalent plutôt un message d'erreur général, tel qu'une sortie de mémoire insuffisante, un arrêt initié par le pilote, un exécuteur mis hors service ou un processus perdu. Cet enregistrement est spécifique à un événement Spark AWS Clean Rooms et n'est pas un événement standard. Il est donc possible que Spark History Server et d'autres outils ne l'affichent pas. Si vous ne le voyez pas, vous pouvez le trouver dans le fichier journal des événements exporté.
Les enregistrements non reconnus sont expurgés par défaut
Si un enregistrement de journal n'est pas AWS Clean Rooms reconnu, tout son texte est remplacé par[REDACTED], y compris les noms de ses champs, et tous ses chiffres sont remplacés par zéro. Seul le type d'enregistrement est conservé. Un tel enregistrement ne contient aucune information diagnostique.