Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Grundlegendes zu redigierten Protokollen
AWS Clean Rooms redigiert Spark-Logs vor dem Export, sodass die exportierten Logs weder den Inhalt der Daten eines Mitglieds preisgeben noch die Tabelle und die Speicherorte der Quelldaten identifizieren. AWS Clean Rooms rekonstruiert die Protokolldatensätze und gibt nur die Felder aus, von denen bekannt ist, dass sie sicher geteilt werden können. Einige Informationen werden bewusst beibehalten, einschließlich der Namen der Spalten, die eine Abfrage gelesen hat.
Bei der Redaktion wird nicht zwischen Mitgliedern unterschieden. Erwarten Sie, dass Ihre eigenen Tabellennamen und Abfragewerte aus den Protokollen, die Sie für Ihre eigenen Abfragen exportieren, zu denselben Bedingungen wie die Informationen eines anderen Mitglieds redigiert werden. Leere Felder und Platzhalterfelder sind normal und deuten nicht auf ein Problem beim Export hin.
Was die exportierten Logs enthalten
In den exportierten Protokollen werden die Informationen gespeichert, die zur Diagnose von Ausfällen und Leistungsproblemen erforderlich sind:
-
Zeitangaben — Dauer von Aufgaben und Phasen, Laufzeit, CPU-Zeit, Garbage-Collection-Zeit, Deserialisierungs- und Ergebnisserialisierungszeit, Shuffle-Wartezeit und Shuffle-Schreibzeit werden exakt beibehalten. Timings sind das Hauptsignal für die Leistungsanalyse.
-
Identifikatoren und Zähler der Spark-Ausführung — Auftrags-, Phasen-, Aufgaben- und Versuch-IDs, Partitionszahlen, Task-IDs, Executor-IDs, Hostnamen und Ports.
-
Struktur des Abfrageplans — Der physische Planbaum, einschließlich Operatornamen wie
HashAggregateSortMergeJoin, undExchange, sodass Sie sehen können, wie der Plan aussieht und wie die Engine Ihre Abfrage ausgeführt hat. Ein Operatorname, der nicht von Spark stammt, wird als angezeigt[REDACTED]. -
Quellspaltennamen — Spaltennamen, die aus einer Tabelle stammen, die gerade gescannt wird, sodass Sie sehen können, welche Spalten in Filtern, Verknüpfungen und Aggregationen verwendet werden. Namen, die eine Abfrage erstellt, wie z. B. ein Alias, werden nicht beibehalten. Weitere Informationen finden Sie unter Wie werden Spalten- und Tabellennamen behandelt.
-
Scantyp und Dateiformat — Ein Scan-Operator schließt normalerweise den Namen der Tabelle ein, die gelesen wird. Der Name wird durch ein Formular ersetzt, das nur den Scantyp und das Dateiformat identifiziert, z. B.
Scan parquet, sodass Sie immer noch erkennen können, wie Daten gelesen werden. Wenn das Dateiformat nicht AWS Clean Rooms erkannt wird, sieht der Operator so aus, alsScanob es kein Format gibt. -
Fehlerklassen — Wenn eine Abfrage fehlschlägt, identifizieren die Protokolle zwar die Art des Fehlers, aber nicht die Daten, die ihn verursacht haben. Sie melden die Fehlerklasse von Spark, den SQLSTATE-Code und die Standardnachricht, die Spark für diese Klasse definiert, wobei die
<placeholder>Tokens der Nachricht nicht ausgefüllt sind, da die Werte, die sie füllen würden, aus den Daten stammen. Bei einer fehlgeschlagenen Umwandlung wird beispielsweise eine Meldung[CAST_INVALID_INPUT]gemeldet, in der beschrieben wird, dass ein Wert eines Typs nicht in einen anderen umgewandelt werden kann, ohne dass der Wert angezeigt wird. Wenn ein Fehler einen anderen verursacht, werden die Fehlerklassen in der Kette zusammen gemeldet, und zwar bis zu einigen Ebenen. Ein Fehler, der nicht von Spark herrührt, wird nur als Fehler gemeldet, der nicht von Spark stammt und keine Klasse enthält.Einzelne Aufgabenfehler melden nur die Art des Fehlers, z. B.
ExceptionFailureSie haben keine eigene Fehlerklasse. -
Spark-Konfiguration — Einstellungen, deren Werte immer Zahlen, Größen oder feste Schlüsselwörter sind und die am häufigsten zur Diagnose eines Leistungsproblems benötigt werden: Treiber- und Executor-Kerne und Speicher, Speicherfraktionen und Off-Heap-Einstellungen, dynamische Zuweisungseinstellungen, Einstellungen für die adaptive Abfrageausführung, Standardparallelität und Shuffle-Partitionsanzahl, Broadcast-Join-Schwellenwert, maximale Partitionsgröße, Shuffle-Komprimierungseinstellungen, Scheduler-Modus und Serializer. Die meisten anderen Konfigurationen sind geschwärzt, da Einstellungen Pfade, Bezeichner und Abfragetext enthalten können. Eine dieser Einstellungen wird auch weggelassen, wenn es sich bei ihrem Wert nicht um eine einfache Zahl, Größe oder ein Schlüsselwort handelt.
-
Speicherauslastung und Datenvolumen — Spitzenausführungsspeicher, Speicher- und Festplattenüberlastung, JVM-Speicher des Executors, zwischengespeicherte Datengrößen, Anzahl der Shuffle-Blocks und Anzahl der gelesenen und geschriebenen Byte und Datensätze, einschließlich Shuffle-Lese- und Schreibvolumes. Diese Zahlen sind eher abgerundet als exakt. Weitere Informationen finden Sie unter Wie unterscheiden sich redigierte Logs von Standard-Spark-Logs.
-
Warum ein Executor gestoppt wurde — Eine Kategorie für jeden Executor, der gestoppt wurde, z. B. weil der Speicher knapp wurde, vom Treiber heruntergefahren wurde, außer Betrieb genommen wurde oder nicht reagiert. Dies ist oft der schnellste Weg, um zu erklären, warum eine Abfrage fehlgeschlagen ist. In den Protokollen wird auch jeder Executor oder Host aufgezeichnet, für den Spark die Planung von Arbeiten eingestellt hat. Dies ist nützlich, wenn sich Fehler an einer Stelle wiederholen. Weitere Informationen finden Sie unter Wie unterscheiden sich redigierte Logs von Standard-Spark-Logs.
-
Details zum Fehler beim Shuffle-Abruf — Wenn eine Aufgabe keine Shuffle-Ausgabe abrufen kann, werden die Identifikatoren Shuffle, Map Index und Reduce zusammen mit dem Executor und dem Host, gegen den der Abruf versucht wurde, beibehalten. Auf diese Weise können Sie wiederholte Fehler anhand einer einzelnen Quelle, die normalerweise darauf hindeuten, dass der Executor nicht reagiert, von Fehlern unterscheiden, die sich über viele Quellen verteilen und in der Regel auf vorübergehende Netzwerkprobleme hinweisen.
Was ist redigiert
-
Datenwerte — Literalwerte aus Ihrer Abfrage und Datenwerte aus einer beliebigen Tabelle. Ein Filterprädikat zeigt, welche Spalte gefiltert wurde, aber nicht den Wert, mit dem sie verglichen wurde.
-
Tabellennamen und Speicherorte — Tabellenkennungen, Datenbanknamen und Amazon S3-Pfade.
-
Abfragetext — Die SQL-Anweisung und jede mit der Abfrage verknüpfte Beschreibung.
-
Fehlermeldungstext und Stack-Traces — Da eine Fehlermeldung den Wert angeben kann, der den Fehler verursacht hat, werden der Meldungstext und die Stack-Traces entfernt. Der Name der zugrunde liegenden Ausnahmeklasse wird ebenfalls geschwärzt, da eine von einer benutzerdefinierten Funktion ausgelöste Ausnahme einen Namen trägt, den der Abfrageautor gewählt hat. Stattdessen wird die Spark-Fehlerklasse für die Abfrage und den Job beibehalten. Der Grund, warum eine Phase fehlgeschlagen ist, und der Grund, warum eine Aufgabe beendet wurde, werden ebenfalls geschwärzt.
-
Namen, die Spark für seine eigene Arbeit aufzeichnet — Die Namen und Aufrufseiten von Stages und zwischengespeicherten Datensätzen sowie der Name der Anwendung. Dies sind Freitextfelder, die einen Tabellennamen oder einen Speicherpfad wiedergeben können. In Spark History Server werden Stufen daher ohne die Beschreibungen angezeigt, mit denen sie normalerweise identifiziert werden würden. Sie lokalisieren eine Phase stattdessen anhand ihrer ID und ihrer Position im Plan.
-
Berechnete und mit Alias versehene Spaltennamen — Namen, die eine Abfrage erstellt und nicht aus einer Tabelle liest, da die Abfrage-Engine einen solchen Namen aus dem Ausdruck generiert und der Name einen Wert enthalten kann. Diese werden als numerische Bezeichner angezeigt, z. B.
#42Weitere Informationen finden Sie unter Wie werden Spalten- und Tabellennamen behandelt. -
Scandetails — Das Leseschema, die bei jedem Scan angewendeten Filterprädikate (nach unten gerichtete Filter, Partitionsfilter und Datenfilter) und der Speicherort der Daten.
-
Links zu Treiber- und Executor-Protokollen — Die Log-URLs, die Spark für jeden Executor und für den Treiber aufzeichnet. In Spark History Server sind die Links, die normalerweise ein Treiber- oder Executor-Protokoll öffnen würden, nicht gefüllt.
-
Ressourcenkennungen und Dienstendpunkte — AWS Konto-IDs, ARNs, z. B. die von IAM-Rollen und AWS KMS -Schlüsseln, und die Endpunkt-URLs der Dienste, die zur Ausführung Ihrer Abfrage aufrufen. AWS Clean Rooms
-
AWS Servicedetails — AWS Clean Rooms Klassennamen, Klassenpfadeinträge, JVM-Konfiguration sowie Hadoop- und Systemeigenschaften. Jobeigenschaften werden ebenfalls geschwärzt, mit Ausnahme der Identifikatoren, die Spark History Server benötigt, um Jobs der Abfrageausführung zuzuordnen, zu der sie gehören.
Wie werden Spalten- und Tabellennamen behandelt
Die exportierten Protokolle behalten die Namen der Spalten bei, die eine Abfrage gelesen hat. In der Abfrage erstellte Tabellennamen und Spaltenaliase werden geschwärzt. Ein Name, den eine Abfrage erstellt, wird aus dem Ausdruck generiert, den sie benennt, und dieser generierte Name kann einen Wert aus der Abfrage enthalten: SELECT 'confidential' erzeugt eine Spalte mit dem Namen. confidential Ein Name erscheint daher nur, wenn er auf eine Spalte einer gescannten Tabelle zurückgeführt werden kann. Jeder andere Name wird durch einen numerischen Bezeichner ersetzt.
Nehmen Sie beispielsweise die folgende Abfrage.
SELECT user_id, SUM(amount) AS total FROM sales WHERE region = 'us-west' GROUP BY user_id
Die exportierten Protokolle stellen dies wie folgt dar.
| Element der Abfrage | In den exportierten Protokollen |
|---|---|
Die Spalten user_idamount, und region |
Wird nach Namen angezeigt, sodass Sie sehen können, wonach die Abfrage gruppiert, summiert und gefiltert wurde |
Die Tabellesales, ihre Datenbank und ihr Speicherort |
Nicht vorhanden |
Der Wert 'us-west' |
Ersetzt durch [REDACTED] |
Der Alias total |
Durch einen numerischen Bezeichner ersetzt, da die Abfrage den Namen erstellt und nicht aus einer Tabelle gelesen hat |
Wie unterscheiden sich redigierte Logs von Standard-Spark-Logs
Die Anzahl der Zeilen und das Datenvolumen sind ungefähre Angaben
Datensatzzahlen, Bytevolumen, Überlaufgrößen und Spitzenspeicherwerte werden auf eine Größenordnung abgerundet, da eine genaue Zählung die Größe der Daten eines anderen Mitglieds aufdecken kann. Eine Aufgabe, die 1.342 Datensätze liest, meldet 1.000. Messungen unter 100 werden als 0 gemeldet.
Da jede Zahl abgerundet ist, haben ein Vorgang, der 100 meldet, und ein Vorgang, der 1.000 meldet, möglicherweise fast die gleiche Anzahl von Datensätzen gelesen. Behandeln Sie Zahlen, die sich nur um eine Größenordnung unterscheiden, mit Vorsicht. Größere Unterschiede, z. B. 1.000 gegenüber 10.000.000, deuten immer noch zuverlässig auf eine Schräglage hin.
Redigierte Werte haben mehr als eine Form
Im Abfrageplan wird ein geschwärzter Wert als literaler Text angezeigt. [REDACTED] An anderer Stelle in den Protokollen ist ein geschwärztes Feld stattdessen normalerweise leer. Es kann eine leere Zeichenfolge, eine leere Liste oder ein Wert sein, der überhaupt nicht vorhanden ist, sodass Spark History Server den Datensatz trotzdem lesen kann. Beide Formen bedeuten dasselbe.
Abfragepläne verwenden keine vertraute Operatorsyntax
Ausdrücke im Plan werden als Funktionsaufrufe und nicht in mathematischer Schreibweise geschrieben. Ein Vergleich erscheint als EqualTo(#12, [REDACTED]) statt(a = 5). Funktionsnamen werden ebenfalls in dieser Form angezeigt, und benutzerdefinierte Funktionsnamen werden überhaupt nicht angezeigt.
Nur der physische Tarif ist enthalten
Die exportierten Protokolle enthalten den physischen Plan. Sie enthalten nicht die analysierten, analysierten oder optimierten logischen Pläne, die sie normalerweise begleiten.
Per-task Metriken sind redigiert
Das Plandiagramm listet die Metriken auf, die jeder Operator meldet, z. B. die Anzahl der Ausgabezeilen. Metriken, die von einzelnen Aufgaben gemeldet werden, zeigen überhaupt keinen Wert, da die Zahlen pro Aufgabe, die ihnen zugrunde liegen, entfernt werden. Verwenden Sie für Zahlen auf Aufgabenebene stattdessen die Kennzahlen pro Aufgabe in der Phasenansicht.
Die Kennzahlen für den Spark-Treiber sind abgerundet
Metriken, die Spark auf dem Treiber berechnet, einschließlich derer für Übertragungen, Scans und Schreibvorgänge, melden zwar einen Wert, der jedoch aus dem gleichen Grund wie die Anzahl der Datensätze und das Datenvolumen auf eine Größenordnung abgerundet wird: Eine genaue Zahl kann Aufschluss über die Größe der Daten eines anderen Mitglieds geben.
Nur das Event-Log wird exportiert
Der Export enthält das Spark-Ereignisprotokoll. Er enthält nicht den Freiform-Treiber und die Executor-Ausgabe, die Spark zusammen mit ihm schreibt, da eine einzelne Zeile dieser Ausgabe einen Tabellennamen, einen Speicherpfad oder einen Datenwert enthalten kann. Die Diagnose muss anhand des Ereignisprotokolls erfolgen.
Executor-Fehler zeigen generische Fehlermeldungen
Da der formlose Grund, warum ein Executor beendet wurde, AWS Clean Rooms Dienstdetails enthalten kann, wird in den Protokollen stattdessen eine allgemeine Fehlermeldung angezeigt, z. B. ein Verlassen des Speichers, ein vom Treiber veranlasstes Herunterfahren, ein außer Betrieb gesetzter Executor oder ein verloren gegangener Prozess. Dieser Datensatz ist spezifisch für ein Spark-Standardereignis AWS Clean Rooms und wird daher möglicherweise nicht von Spark History Server und anderen Tools angezeigt. Wenn Sie ihn nicht sehen, finden Sie ihn in der exportierten Event-Log-Datei.
Unbekannte Datensätze werden standardmäßig redigiert
Wenn ein Protokolldatensatz nicht AWS Clean Rooms erkannt wird, wird sein gesamter Text einschließlich seiner Feldnamen durch Null ersetzt[REDACTED], und alle seine Zahlen werden durch Null ersetzt. Nur der Datensatztyp wird beibehalten. Ein solcher Datensatz enthält keine Diagnoseinformationen.