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.
Häufige Herausforderungen bei der Skalierung von Trino-Workloads
Die Hauptvorteile der Verwendung von Amazon S3 mit Trino sind die Fähigkeit von S3, für große Datenmengen zu skalieren, und die Wirtschaftlichkeit von S3. Wenn Sie jedoch große Datenmengen abfragen, kann gelegentlich eine Reihe verwandter Leistungsprobleme auftreten. Diese können sich aus der Art und Weise ergeben, wie Daten gespeichert werden, oder aus Konfigurationseinstellungen, die eine gute Leistung einschränken, oder aus anderen Gründen. Wenn diese Probleme auftreten, können Sie wirksame Maßnahmen ergreifen, um sie zu vermeiden oder zu mildern.
Dieser Abschnitt beginnt mit einer Liste allgemeiner Optimierungen, die Sie implementieren können, um die Abfrageleistung bei großen Datenmengen zu erhöhen. Im Anschluss daran werden häufig auftretende Probleme detailliert beschrieben, und es werden für jedes Problem Abhilfemaßnahmen bereitgestellt.
Dieses Thema stammt aus der folgenden Konferenzpräsentation: Leistung im großen Maßstab beschleunigen: Bewährte Methoden für Trino mit Amazon S3.
Optimierung des Datenlayouts für große Datensätze
Leistungsengpässe treten nicht selten auf, wenn Sie große Datensätze abfragen. Es gibt jedoch bewährte Methoden, die Sie implementieren können, um sich einen Vorsprung zu verschaffen, wenn Sie Trino zum Abfragen von Daten in Amazon S3 verwenden. Diese umfassen u. a. folgende:
Partitionierung — Partitionierung bedeutet, Daten in einer Hierarchie zu organisieren und verwandte Daten auf der Grundlage verwandter Attribute zusammen zu speichern. Durch die Partitionierung müssen Abfragen nicht so viele irrelevante Daten scannen, was zu einer besseren Abfrageleistung führt. Sie können verschiedene Partitionierungsstrategien verwenden, z. B. das Anordnen von Quelldaten mit Präfixen, insbesondere nach Datumsbereichen, Regionen oder anderen Attributen. Weitere Informationen zur Partitionierung von Daten in Amazon S3 zur Leistungssteigerung finden Sie im Blogbeitrag Erste Schritte zur Verwaltung von Partitionen für Amazon S3-Tabellen, die vom AWS Glue Data Catalog unterstützt werden,
oder im Beitrag Die 10 wichtigsten Tipps zur Leistungsoptimierung für. Amazon Athena Bucketing — Beim Bucketing-Verfahren werden zusammengehörende Daten in gemeinsamen Dateien zusammengefasst. Wenn Sie beispielsweise Daten nach einer geografischen Region wie einem Bundesstaat abfragen, können Sie die Abfrageleistung steigern, indem Sie alle Daten für einen bestimmten Bundesstaat in derselben Datei oder Gruppe von Dateien gruppieren. Damit dies am besten funktioniert, sollten Sie Ihr Bucketing auf ein Datenattribut mit hoher Kardinalität stützen, z. B. ein Bundesland oder eine Provinz. Sie können auch Ihre Abfragemuster berücksichtigen. Ein Beispiel hierfür könnte die Gruppierung von Daten für Kalifornien und Oregon sein, wenn Ihre Abfragen in der Regel Daten aus diesen Bundesstaaten zusammen lesen.
Verwaltung von S3-Präfixen — Sie können Amazon S3-Präfixe verwenden, um eine Partitionierungsstrategie zu implementieren. Wenn Sie nur ein einziges Präfix für einen Amazon S3-Bucket verwenden, z. B. ein bestimmtes Datum, kann dies zu einer hohen Anzahl von Anfragen führen und zu einem HTTP 503-Fehler führen. Wir empfehlen, Präfixe zu verwenden, um zusätzliche Bedingungen hinzuzufügen und Ihre Quelldaten effektiver zu organisieren. Weitere Informationen finden Sie unter Organisieren von Objekten mithilfe von Präfixen in der Amazon S3-Dokumentation. Das folgende kurze Beispiel zeigt ein Präfix, das zu einem besseren Anforderungsdurchsatz führt:
s3://bucket/country=US/dt=2024-06-13. In diesem Beispiel sind sowohl das Land als auch das Datum im Präfix enthalten, was zu weniger Lesevorgängen führt als in einem Fall, in dem das Präfix nur das Datum enthält.Die Minderung von HTTP 503-Fehlern wird im Abschnitt zur HTTP-Verlangsamung, der in diesem Thema folgt, ausführlicher behandelt.
Optimierung der Datengröße — Sie können den Befehl OPTIMIZE ausführen, um eine Konfiguration festzulegen, die Abfragen mit besserer Leistung zuträglich ist. Gehen Sie folgendermaßen vor, um ihn für externe Hive-Tabellen auszuführen:
Verwenden Sie es
OPTIMIZEmit dem folgenden Parameter:hive.non-managed-table-writes-enabled=true. Weitere Informationen zu dieser Eigenschaft finden Sie unter Allgemeine Hive-Konfigurationseigenschaften. Stellen Sie den folgenden Sitzungsparameter ein:
SET SESSIONcatalog.non_transactional_optimize_enabled=trueFühren Sie den
OPTIMIZEBefehl aus:ALTER TABLE. In diesem Fallcatalog.schema.tableEXECUTE optimize(file_size_threshold => '128MB')file_size_thresholdsind es standardmäßig 100 MB. Eine Erhöhung dieses Schwellenwerts, wie im Beispiel gezeigt, führt dazu, dass Dateien unter 128 MB zusammengeführt werden.
Wiederholungen konfigurieren — Sie können das Wiederholungslimit erhöhen, wodurch die Wahrscheinlichkeit von HTTP 503-Fehlern verringert werden kann, indem Sie Folgendes festlegen:.
s3.max-error-retriesDies gilt, wenn Sie die TrinoFileSystem API und die Trino 449-Version oder höher verwenden. Wenn Sie dagegen Amazon EMR mit Trino verwenden, verwenden Sie EMRFS, um auf Amazon S3 zuzugreifen. Mit EMRFS können Sie die Anzahl der Ausfälle erhöhen, indem Sie den Parameter ändern.fs.s3.maxRetriesWählen Sie eine Amazon S3-Speicherklasse — Die Auswahl der geeigneten Speicherklasse für Daten zu verschiedenen Zeitpunkten im Lebenszyklus kann sowohl bei der Leistung als auch bei den Kosten helfen, je nachdem, welche Anforderungen Sie für bestimmte Datensammlungen haben. Weitere Informationen finden Sie in der Amazon S3-Dokumentation unter Grundlegendes und Verwalten von Amazon S3-Speicherklassen.
Zu Iceberg migrieren — Eine weitere Lösung zur Minderung von Leistungsproblemen, insbesondere bei der Ausführung von Abfragen für kleine Dateien, ist die Migration zu Iceberg-Tabellen. Iceberg verfügt über Funktionen, die kleine Dateien gut verarbeiten.
Verwenden Sie die automatische Datenkomprimierung — Wenn Sie Iceberg-Tabellen verwenden, kann die automatische Datenkomprimierung mit dem AWS Glue-Datenkatalog die Datengröße optimieren und zu einer besseren Abfrageleistung führen.
Häufige Herausforderungen bei der Abfrage großer Datensätze
In diesem Abschnitt wird eine Sammlung häufiger Probleme aufgeführt, die auftreten können, wenn Sie einen großen Datensatz in Amazon S3 sammeln und mit Trino abfragen. Jeder Abschnitt zeigt Ihnen Möglichkeiten, das Problem zu lösen oder seine Auswirkungen auf Abfragen zu reduzieren. Jedes der in den folgenden Abschnitten beschriebenen Probleme wurde mithilfe eines Hive-Connectors reproduziert und getestet.
Große Datenscans
Wenn Ihre Abfrage große Datensätze scannen muss, kann dies zu Problemen wie einer langsamen Abfrageleistung und höheren Speicherkosten führen. Große Datenmengen können auf ein schnelles Datenwachstum oder eine Planung zurückzuführen sein, die nicht dazu führt, dass ältere Daten innerhalb eines angemessenen Zeitrahmens verschoben werden. Dies kann zu langsameren Abfragen führen.
Um Leistungseinbußen beim Scannen großer Datenmengen zu vermeiden, empfehlen wir, Partitionierung und Bucketing zu verwenden:
Bei der Partitionierung werden zusammengehörende Daten auf der Grundlage ihrer Attribute gruppiert. Durch eine effektive Partitionierung kann die Abfrageleistung erheblich verbessert werden.
Buckets beziehen sich auf das Gruppieren von Daten in Dateien oder Buckets nach bestimmten, verwandten Datenspalten. Buckets bedeuten in der Regel, dass zusammengehörende Quelldatendateien physisch zusammengehalten werden.
Um zu veranschaulichen, wie die Risikominderung bei umfangreichen Datenscans funktionieren kann, nehmen Sie an, Sie speichern und fragen Daten ab, die Datensätze mit einem Bundesstaatattribut enthalten, das Kalifornien oder Alaska zugewiesen werden kann, und dieses Bundesstaatsattribut ist eine Ihrer Abfragebedingungen. Sie können die Abfrageleistung verbessern, indem Sie Daten für jeden Bundesstaat in einem separaten S3-Bucket speichern oder Ihre Daten anhand des Bundesstaats mithilfe eines S3-Präfixes partitionieren. Diese Partitionierung und das Bucketing können auch zu Leistungsverbesserungen führen, wenn Sie sie auf einer zusätzlichen Spalte, wie beispielsweise einem Datumsattribut, basieren.
Anmerkung
Wenn eine Spalte eine hohe Kardinalität hat und Sie sie zum Gruppieren von Daten verwenden möchten, empfehlen wir in diesem Fall die Verwendung von Buckets. Andererseits sollten Partitionsschlüssel im Allgemeinen eine niedrigere Kardinalität haben.
Verwendung verschiedener S3-Speichertypen
Im Allgemeinen wählen Sie Speichertypen auf der Grundlage der Anforderungen an Leistung, Datenzugriff, Stabilität und Kosten für Ihre Workloads aus. Es kann Kompromisse zwischen Kosten und Leistung geben. Es ist wichtig, die geeignete Amazon S3-Speicherklasse auszuwählen, die Ihren Datenzugriffsmustern entspricht. Es gibt zwei Hauptzugriffsmuster:
Daten, auf die auf bekannte oder vorhersehbare Weise zugegriffen wird. Wenn Sie Daten haben, auf die selten zugegriffen wird, kann S3 Standard IA im Allgemeinen eine gute Wahl sein, da es zur Kostensenkung beiträgt. Wenn Sie häufig auf Daten zugegriffen haben, eignet sich S3 Standard am besten für den Zugriff mit Amazon EMR und Trino.
Daten, auf die auf unbekannte oder unvorhersehbare Weise zugegriffen wird. Dies kann die Verwendung anderer Amazon S3-Speicherklassen erfordern. Es gibt Kompromisse zwischen den S3-Speicherklassen. Dazu gehören Latenz, Speicherkosten und Verfügbarkeit. Sie können einen geeigneten S3-Speichertyp auswählen, der auf Ihren Workloads und Zugriffsmustern basiert. Eine Beschreibung der Vorteile der einzelnen Klassen finden Sie unter Amazon S3-Speicherklassen.
Verdichtung verwenden
Sie können auch die automatische Iceberg-Komprimierung verwenden, wenn Sie Iceberg-Tabellen verwenden, was zu optimaleren Dateigrößen führt, um die Abfrageeffizienz zu erhöhen. Weitere Informationen finden Sie unter AWS Glue Data Catalog unterstützt jetzt die automatische Komprimierung von Apache Iceberg-Tabellen.
Fehler beim Verlangsamen von HTTP
Dies tritt auf, wenn die Anforderungsrate einen vorkonfigurierten Schwellenwert für ein Amazon S3-Präfix überschreitet. Der HTTP-Fehler, der am häufigsten auftritt, wenn dieser Status erreicht wird, ist der folgende: Fehler 503: Bitte reduzieren Sie Ihre Anforderungsrate. Die Ursache für dieses Problem kann auf das Vorhandensein einer großen Anzahl kleiner Dateien zurückzuführen sein, da viele Splits erstellt werden müssen, um die Daten lesen zu können. Es gibt mehrere Möglichkeiten, das Problem zu beheben:
Erhöhen Sie das Wiederholungslimit für Amazon S3-Anfragen in Trino. Dies ist für die Verwendung
fs.s3.maxretriesvon EMRFS in Trino 449 festgelegt.Optimieren Sie die Dateigrößen, was auch zu einer niedrigeren Anforderungsrate führen kann.
Weitere Informationen darüber, wie Trino die Anzahl der Splits in einem abzufragenden Datensatz bestimmt, finden Sie in der Hive-Connector-Dokumentation unter Konfigurationseigenschaften zur
Schwierigkeiten beim Abfragen kleiner Dateien
Das Abfragen vieler kleiner Dateien kann aufgrund einer hohen Anzahl von GET- und LIST-Anforderungen zu einem hohen I/O Overhead führen und sich in der Folge negativ auf die Abfrageleistung auswirken. Die Optimierung der Dateigröße kann die Abfrageleistung verbessern. Es gibt mehrere Möglichkeiten, dies zu tun:
Konsolidieren Sie Daten in weniger größeren Dateien. (Im Allgemeinen empfehlen wir, die Dateigröße bei etwa 128 MB zu belassen.) Sie können dies mit Tools tun, wenn Sie Daten aufnehmen, z. B. in einer ETL-Pipeline, oder Sie können Daten manuell konsolidieren. Wenn Ihnen diese Lösungen nicht zur Verfügung stehen, sind die verbleibenden Optionen möglicherweise besser für Sie geeignet.
Führen Sie den Befehl
OPTIMIZEaus.Legen Sie den Parameter
SESSIONfest.
Beachten Sie, dass Iceberg über eine Funktion verfügt, mit der kleine Dateien zu größeren Dateien zusammengeführt werden können, nämlich die automatische Komprimierung. Es funktioniert mit Dateien, die mit dem AWS Glue-Datenkatalog verwaltet werden. Weitere Informationen finden Sie unter AWS Glue Data Catalog unterstützt jetzt die automatische Komprimierung von Apache Iceberg-Tabellen.
Abfragen, die Daten enthalten, die nicht benötigt werden
Da Daten häufig wachsen, ist es unerlässlich, Ihre Datenzugriffsmuster zu verfolgen und Daten angemessen zu verschieben, wenn sie altern oder irrelevant werden. Dies liegt daran, dass sich die Abfrageleistung mit der Zeit verschlechtern kann, wenn die Daten wachsen, was hauptsächlich auf das schiere Datenvolumen zurückzuführen ist, das bei einer Abfrage gescannt werden muss. Amazon S3 und andere Services bieten Anleitungen für die Migration des Datenlebenszyklus. Darin werden Strategien für das Verschieben von Daten an verschiedene Speicherorte aufgezeigt, wenn sie kalt werden. Dies hat auch einen Vorteil bei den Speicherkosten.
Zusätzlich zur Datenmigration können Sie andere Strategien anwenden, z. B. das Entfernen von Quelldaten, die für die von Ihnen ausgeführten Abfragen nicht relevant sind. Dies kann einige Arbeit erfordern, da dies eine Änderung Ihres Quelldatenschemas bedeuten kann. Das positive Ergebnis besteht jedoch darin, das Datenvolumen zu reduzieren und schnellere Abfragen zu ermöglichen. Weitere Informationen finden Sie unter Den Lebenszyklus von Objekten verwalten.