Zephyrnet-Logo

Führen Sie Trino-Abfragen mit Amazon EMR 2.7 | 6.15.0-mal schneller aus Amazon Web Services

Datum:

Trino ist eine verteilte Open-Source-SQL-Abfrage-Engine, die für interaktive Analyse-Workloads entwickelt wurde. Auf AWS können Sie Trino ausführen Amazon EMR, wo Sie die Flexibilität haben, Ihre bevorzugte Version von Open-Source-Trino auszuführen Amazon Elastic Compute-Cloud (Amazon EC2) Instanzen, die Sie verwalten, oder auf Amazonas Athena für ein serverloses Erlebnis. Wenn Sie Trino auf Amazon EMR oder Athena verwenden, erhalten Sie die neuesten Innovationen der Open-Source-Community sowie proprietäre, von AWS entwickelte Optimierungen.

Ab Amazon EMR 6.8.0 und der Athena-Engine Version 2 hat AWS Abfragepläne und Engine-Verhaltensoptimierungen entwickelt, die die Abfrageleistung auf Trino verbessern. In diesem Beitrag vergleichen wir Amazon EMR 6.15.0 mit Open-Source-Trino 426 und zeigen, dass TPC-DS-Abfragen auf Amazon EMR 2.7 Trino 6.15.0 im Vergleich zu bis zu 426-mal schneller ausgeführt wurden Open-Source-Trino 426. Später erläutern wir einige der von AWS entwickelten Leistungsoptimierungen, die zu diesen Ergebnissen beitragen.

Benchmark-Setup

In unseren Tests haben wir den in Amazon S3 gespeicherten 3-TB-Datensatz im komprimierten Parquet-Format verwendet und Metadaten für Datenbanken und Tabellen werden im gespeichert AWS-Kleber Datenkatalog. Dieser Benchmark verwendet unveränderte TPC-DS-Datenschemata und Tabellenbeziehungen. Faktentabellen sind nach der Datumsspalte unterteilt und enthalten 200–2100 Partitionen. Für keine der Tabellen waren Tabellen- und Spaltenstatistiken vorhanden. Wir haben TPC-DS-Abfragen aus dem Open-Source-Programm Trino verwendet Github-Repository ohne Änderung. Benchmark-Abfragen wurden nacheinander auf zwei verschiedenen Amazon EMR 6.15.0-Clustern ausgeführt: einer mit Amazon EMR Trino 426 und der andere mit Open-Source-Trino 426. Beide Cluster verwendeten 1 r5.4xlarge-Koordinator und 20 r5.4xlarge-Worker-Instanzen.

Ergebnisse beobachtet

Unsere Benchmarks zeigen eine durchweg bessere Leistung mit Trino auf Amazon EMR 6.15.0 im Vergleich zu Open-Source-Trino. Die gesamte Abfragelaufzeit von Trino auf Amazon EMR war im Vergleich zu Open Source 2.7-mal schneller. Das folgende Diagramm zeigt Leistungsverbesserungen gemessen an der gesamten Abfragelaufzeit (in Sekunden) für die Benchmark-Abfragen.

Viele der TPC-DS-Abfragen zeigten im Vergleich zu Open-Source-Trino mehr als fünfmal schnellere Leistungssteigerungen. Einige Abfragen zeigten eine sogar bessere Leistung, beispielsweise Abfrage 72, die sich um das 160-fache verbesserte. Die folgende Grafik zeigt die Top 10 TPC-DS-Abfragen mit der größten Laufzeitverbesserung. Für eine prägnante Darstellung und um eine Schiefe der Leistungsverbesserungen im Diagramm zu vermeiden, haben wir q72 ausgeschlossen.

Leistungssteigerungen

Nachdem wir nun die Leistungssteigerungen mit Trino auf Amazon EMR verstanden haben, wollen wir uns eingehender mit einigen der wichtigsten Innovationen befassen, die von der AWS-Technik entwickelt wurden und zu diesen Verbesserungen beitragen.

Die Wahl einer besseren Join-Reihenfolge und eines besseren Join-Typs ist für eine bessere Abfrageleistung von entscheidender Bedeutung, da sie sich darauf auswirken kann, wie viele Daten aus einer bestimmten Tabelle gelesen werden, wie viele Daten über das Netzwerk an die Zwischenstufen übertragen werden und wie viel Speicher zum Aufbau benötigt wird eine Hash-Tabelle, um einen Join zu erleichtern. Entscheidungen zur Verknüpfungsreihenfolge und zum Verknüpfungsalgorithmus sind in der Regel eine Funktion, die von kostenbasierten Optimierern ausgeführt wird, die Statistiken verwenden, um Abfragepläne zu verbessern, indem sie entscheiden, wie Tabellen und Unterabfragen verknüpft werden.

Allerdings sind Tabellenstatistiken oft nicht verfügbar, veraltet oder zu kostspielig, um sie in großen Tabellen zu sammeln. Wenn keine Statistiken verfügbar sind, verwenden Amazon EMR und Athena S3-Dateimetadaten, um Abfragepläne zu optimieren. S3-Dateimetadaten werden verwendet, um kleine Unterabfragen und Tabellen in der Abfrage abzuleiten und gleichzeitig die Join-Reihenfolge oder den Join-Typ zu bestimmen. Betrachten Sie beispielsweise die folgende Abfrage:

SELECT ss_promo_sk FROM store_sales ss, store_returns sr, call_center cc WHERE 
ss.ss_cdemo_sk = sr.sr_cdemo_sk AND ss.ss_customer_sk = cc.cc_call_center_sk 
AND cc_sq_ft > 0

Die syntaktische Verknüpfungsreihenfolge lautet store_sales verbindet store_returns verbindet call_center. Mit den Optimierungsregeln für Amazon EMR-Join-Typ und Auftragsauswahl wird die optimale Join-Reihenfolge bestimmt, auch wenn diese Tabellen keine Statistiken haben. Für die vorherige Abfrage if call_center Wird nach Schätzung der ungefähren Größe anhand der S3-Dateimetadaten als kleine Tabelle betrachtet, werden die Verknüpfungsoptimierungsregeln von EMR durchgeführt store_sales mit call_center Zuerst können Sie den Join in einen Broadcast-Join umwandeln, um die Abfrage zu beschleunigen und den Speicherverbrauch zu reduzieren. Durch die Neuordnung von Joins wird die Zwischenergebnisgröße minimiert, was dazu beiträgt, die Gesamtlaufzeit der Abfrage weiter zu reduzieren.

Bei Amazon EMR 6.10.0 und höher sind auf S3-Dateimetadaten basierende Join-Optimierungen standardmäßig aktiviert. Wenn Sie Amazon EMR 6.8.0 oder 6.9.0 verwenden, können Sie diese Optimierungen aktivieren, indem Sie die Sitzungseigenschaften von Trino-Clients festlegen oder beim Erstellen Ihres Clusters die folgenden Eigenschaften zur trino-config-Klassifizierung hinzufügen. Beziehen auf Konfigurieren Sie Anwendungen Einzelheiten zum Überschreiben der Standardkonfigurationen für eine Anwendung finden Sie hier.

Konfiguration für die Auswahl des Join-Typs:

session property: rule_based_join_type_selection=true
config property: rule-based-join-type-selection=true

Konfiguration für die Join-Neuordnung:

session property: rule_based_join_reorder=true
config property: rule-based-join-reorder=true

Zusammenfassung

Mit Amazon EMR 6.8.0 und höher können Sie Abfragen auf Trino deutlich schneller ausführen als auf Open-Source-Trino. Wie in diesem Blogbeitrag gezeigt, zeigte unser TPC-DS-Benchmark eine 2.7-fache Verbesserung der gesamten Abfragelaufzeit mit Trino auf Amazon EMR 6.15.0. Die in diesem Beitrag und vielen anderen besprochenen Optimierungen sind auch verfügbar, wenn Trino-Abfragen auf Athena ausgeführt werden, wo ähnliche Leistungsverbesserungen beobachtet werden. Weitere Informationen finden Sie unter Führen Sie Abfragen dreimal schneller aus, mit bis zu 3 % Kostenersparnis mit der neuesten Amazon Athena-Engine.

Im Rahmen unserer Mission, im Namen der Kunden Innovationen voranzutreiben, veröffentlichen Amazon EMR und Athena häufig Leistungs- und Zuverlässigkeitsverbesserungen für ihre neuesten Versionen. Überprüf den Amazon EMR und Amazonas Athena Auf den Release-Seiten erfahren Sie mehr über neue Funktionen und Verbesserungen.


Über die Autoren

Bhargavi Sagi ist Softwareentwicklungsingenieur bei Amazon Athena. Sie kam 2020 zu AWS und hat an verschiedenen Bereichen von Amazon EMR und Athena Engine V3 gearbeitet, darunter Engine-Upgrade, Engine-Zuverlässigkeit und Engine-Leistung.

Sushil Kumar Shivashankar ist Engineering Manager für das EMR Trino- und Athena Query Engine-Team. Seit 2014 konzentriert er sich auf den Bereich Big Data Analytics.

spot_img

Neueste Intelligenz

spot_img