Warum Sie Presto für Ad-hoc-Analysen verwenden sollten

Presto! Es ist nicht nur eine Beschwörung, Ihr Publikum nach einem Zaubertrick zu begeistern, sondern auch ein Name, der immer häufiger verwendet wird, wenn es darum geht, wie man Big Data durchläuft. Obwohl es viele Bereitstellungen von Presto in freier Wildbahn gibt, ist die Technologie - eine verteilte SQL-Abfrage-Engine, die alle Arten von Datenquellen unterstützt - vielen Entwicklern und Datenanalysten, die davon profitieren könnten, unbekannt.

In diesem Artikel werde ich Presto diskutieren: Was es ist, woher es kommt, wie es sich von anderen Data Warehousing-Lösungen unterscheidet und warum Sie es für Ihre Big Data-Lösungen in Betracht ziehen sollten.

Presto gegen Hive

Presto wurde 2012 auf Facebook gegründet. Presto wurde 2013 als Open-Source-Produkt von der Presto Foundation (Teil der Linux Foundation) verwaltet und erfreut sich im Laufe der Jahre einer stetig wachsenden Beliebtheit. Heute haben mehrere Unternehmen ein Geschäftsmodell um Presto herum aufgebaut, wie beispielsweise Ahana, mit Ad-hoc-Analyseangeboten auf PrestoDB-Basis.

Presto wurde entwickelt, um Endbenutzern den Zugriff auf enorme Datenmengen für Ad-hoc-Analysen zu ermöglichen. Vor Presto verwendete Facebook Hive (ebenfalls von Facebook erstellt und dann an die Apache Software Foundation gespendet), um diese Art von Analyse durchzuführen. Als die Datenmengen von Facebook wuchsen, wurde festgestellt, dass Hive nicht ausreichend interaktiv ist (sprich: zu langsam). Dies lag hauptsächlich daran, dass die Grundlage von Hive MapReduce ist, für das zu diesem Zeitpunkt die Beibehaltung von Zwischendatensätzen für HDFS erforderlich war. Das bedeutete eine Menge E / A auf der Festplatte für Daten, die letztendlich weggeworfen wurden. 

Presto verfolgt einen anderen Ansatz bei der Ausführung dieser Abfragen, um Zeit zu sparen. Anstatt Zwischendaten in HDFS zu speichern, können Sie mit Presto die Daten in den Speicher ziehen und dort Vorgänge mit den Daten ausführen, anstatt alle Zwischendatensätze auf der Festplatte zu speichern. Wenn Ihnen das bekannt vorkommt, haben Sie vielleicht schon von Apache Spark (oder einer Reihe anderer Technologien) gehört, die das gleiche Grundkonzept haben, um MapReduce-basierte Technologien effektiv zu ersetzen. Mit Presto behalte ich die Daten dort, wo sie sich befinden (in Hadoop oder, wie wir sehen werden, überall) und führe die Ausführungen im Arbeitsspeicher über unser verteiltes System aus, wobei ich die Daten nach Bedarf zwischen den Servern mische. Ich vermeide es, eine Festplatte zu berühren, was letztendlich die Ausführungszeit von Abfragen beschleunigt.

Wie Presto funktioniert

Im Gegensatz zu einem herkömmlichen Data Warehouse wird Presto als SQL-Abfrageausführungsmodul bezeichnet. Data Warehouses steuern, wie Daten geschrieben werden, wo sich diese Daten befinden und wie sie gelesen werden. Sobald Sie Daten in Ihr Lager erhalten haben, kann es schwierig sein, sie wieder herauszubekommen. Presto verfolgt einen anderen Ansatz, indem es den Datenspeicher von der Verarbeitung entkoppelt und gleichzeitig dieselbe ANSI SQL-Abfragesprache unterstützt, die Sie gewohnt sind.

Im Kern führt Presto Abfragen über Datensätze aus, die von Plug-Ins bereitgestellt werden, insbesondere über Connectors. Ein Connector bietet Presto die Möglichkeit, Daten in ein externes Datensystem zu lesen (und sogar zu schreiben). Der Hive Connector ist einer der Standard-Connectors und verwendet dieselben Metadaten, die Sie für die Interaktion mit HDFS oder Amazon S3 verwenden würden. Aufgrund dieser Konnektivität ist Presto ein Ersatz für Unternehmen, die Hive heute verwenden. Es kann Daten aus denselben Schemas und Tabellen mit denselben Datenformaten lesen - ORC, Avro, Parkett, JSON und mehr. Neben dem Hive-Connector finden Sie Konnektoren für Cassandra, Elasticsearch, Kafka, MySQL, MongoDB, PostgreSQL und viele andere. Presto wird ständig mit Konnektoren ausgestattet, sodass Presto überall auf Daten zugreifen kann.

Der Vorteil dieses entkoppelten Speichermodells besteht darin, dass Presto eine einzige Verbundansicht aller Ihrer Daten bereitstellen kann - unabhängig davon, wo sie sich befinden. Dies erhöht die Möglichkeiten der Ad-hoc-Abfrage auf ein nie zuvor erreichtes Niveau und bietet gleichzeitig interaktive Abfragezeiten für Ihre großen Datenmengen (sofern Sie über die Infrastruktur verfügen, um diese zu sichern, lokal oder in der Cloud).

Lassen Sie uns einen Blick darauf werfen, wie Presto bereitgestellt wird und wie Ihre Abfragen ausgeführt werden. Presto ist in Java geschrieben und erfordert daher ein JDK oder JRE, um starten zu können. Presto wird als zwei Hauptdienste bereitgestellt, ein einzelner Koordinator und viele Mitarbeiter . Der Koordinatordienst ist effektiv das Gehirn des Vorgangs. Er empfängt Abfrageanforderungen von Clients, analysiert die Abfrage, erstellt einen Ausführungsplan und plant dann die Arbeit, die für viele Worker-Dienste ausgeführt werden soll. Jeder Worker verarbeitet einen Teil der Gesamtabfrage parallel, und Sie können Ihrer Presto-Bereitstellung Worker-Services hinzufügen, die Ihren Anforderungen entsprechen. Jede Datenquelle ist als Katalog konfiguriert , und Sie können in jeder Abfrage so viele Kataloge abfragen, wie Sie möchten.

Ahana

Der Zugriff auf Presto erfolgt über einen JDBC-Treiber und ist in praktisch jedes Tool integriert, das mithilfe von JDBC eine Verbindung zu Datenbanken herstellen kann. Die Presto-Befehlszeilenschnittstelle (CLI) ist häufig der Ausgangspunkt für die Erkundung von Presto. In beiden Fällen stellt der Client eine Verbindung zum Koordinator her, um eine SQL-Abfrage auszugeben. Diese Abfrage wird vom Koordinator analysiert und validiert und in einen Abfrageausführungsplan integriert. Dieser Plan beschreibt, wie eine Abfrage von den Presto-Mitarbeitern ausgeführt wird. Der Abfrageplan beginnt (normalerweise) mit einem oder mehreren Tabellenscans, um Daten aus Ihren externen Datenspeichern abzurufen. Es gibt dann eine Reihe von Operatoren, die Projektionen, Filter, Verknüpfungen, Gruppierungen, Aufträge und alle Arten anderer Operationen ausführen. Der Plan endet damit, dass die endgültige Ergebnismenge über den Koordinator an den Kunden geliefert wird.Diese Abfragepläne sind wichtig, um zu verstehen, wie Presto Ihre Abfragen ausführt, und um die Abfrageleistung zu analysieren und mögliche Engpässe zu finden.

Beispiel für eine Presto-Abfrage

Schauen wir uns eine Abfrage und den entsprechenden Abfrageplan an. Ich werde eine TPC-H-Abfrage verwenden, ein gängiges Benchmarking-Tool für SQL-Datenbanken. Kurz gesagt, TPC-H definiert einen Standardsatz von Tabellen und Abfragen, um die Vollständigkeit der SQL-Sprache zu testen und verschiedene Datenbanken zu vergleichen. Die Daten sind für Geschäftsanwendungsfälle konzipiert und enthalten Kundenaufträge von Artikeln, die von einer großen Anzahl von Verbrauchsmaterialien bereitgestellt werden können. Presto bietet einen TPC-H-Connector, der Daten im laufenden Betrieb generiert - ein sehr nützliches Tool beim Auschecken von Presto.

WÄHLEN

  SUMME (l.extendedprice * l.discount) AS Umsatz

FROM lineitem l

WO

  l.shipdate> = DATE '1994-01-01'

   UND l.shipdate <DATE '1994-01-01' + INTERVALL '1' JAHR

   UND l.discount ZWISCHEN .06 - 0.01 UND .06 + 0.01

   UND l.Menge <24;

Dies ist die Abfrage Nummer sechs, die als Forecasting Revenue Change Query bezeichnet wird. In der TPC-H-Dokumentation heißt es: „Diese Abfrage quantifiziert die Höhe der Umsatzsteigerung, die sich aus der Eliminierung bestimmter unternehmensweiter Rabatte in einem bestimmten Prozentsatzbereich in einem bestimmten Jahr ergeben hätte.“

Presto unterteilt eine Abfrage in eine oder mehrere Stufen, auch Fragmente genannt , und jede Stufe enthält mehrere Operatoren . Ein Operator ist eine bestimmte Funktion des ausgeführten Plans, entweder ein Scan, ein Filter, ein Join oder ein Austausch. Börsen brechen oft die Stufen auf. Ein Austausch ist der Teil des Plans, in dem Daten über das Netzwerk an andere Mitarbeiter im Presto-Cluster gesendet werden. Auf diese Weise schafft es Presto, seine Skalierbarkeit und Leistung bereitzustellen - indem eine Abfrage in mehrere kleinere Vorgänge aufgeteilt wird, die parallel ausgeführt werden können, und die Umverteilung von Daten über den Cluster ermöglicht wird, um Verknüpfungen, Gruppierungen und die Reihenfolge von Datensätzen durchzuführen. Schauen wir uns den verteilten Abfrageplan für diese Abfrage an. Beachten Sie, dass Abfragepläne von unten nach oben gelesen werden.

 Fragment 0 [EINZELN]

     - Output [Einnahmen] => [Summe: doppelt]       

             Einnahmen: = Summe   

         - Aggregat (FINAL) => [Summe: doppelt]         

                 sum: = "presto.default.sum" ((sum_4))          

             - LocalExchange [SINGLE] () => [sum_4: double]  

                 - RemoteSource [1] => [sum_4: double]      

 Fragment 1 

     - Aggregat (TEILWEISE) => [sum_4: double]  

             sum_4: = "presto.default.sum" ((Ausdruck))  

         - ScanFilterProject [table = TableHandle {connectorId = 'tpch', connectorHandle = "lineitem: sf1.0", layout = "Optional [lineitem: sf1.0]"}, gruppiert = false, filterPredicate = ((Rabatt ZWISCHEN (DOUBLE 0.05) ) UND (DOPPELT 0,07)) UND ((Menge) = (DATUM 1994-01-01)) UND ((Versanddatum) [Ausdruck: doppelt]

                 Ausdruck: = (verlängerter Preis) * (Rabatt)   

                 extendedprice := tpch:extendedprice

                 discount := tpch:discount         

                 shipdate := tpch:shipdate 

                 quantity := tpch:quantity  

This plan has two fragments containing several operators. Fragment 1 contains two operators. The ScanFilterProject scans data, selects the necessary columns (called projecting) needed to satisfy the predicates, and calculates the revenue lost due to the discount for each line item. Then a partial Aggregate operator calculates the partial sum. Fragment 0 contains a LocalExchange operator that receives the partial sums from Fragment 1, and then the final aggregate to calculate the final sum. The sum is then output to the client.

When executing the query, Presto scans data from the external data source in parallel, calculates the partial sum for each split, and then ships the result of that partial sum to a single worker so it can perform the final aggregation. Running this query, I get about $123,141,078.23 in lost revenue due to the discounts.

      revenue       

----------------------

 1.2314107822830005E8

As queries grow more complex, such as joins and group-by operators, the query plans can get very long and complicated. With that said, queries break down into a series of operators that can be executed in parallel against data that is held in memory for the lifetime of the query.

As your data set grows, you can grow your Presto cluster in order to maintain the same expected runtimes. This performance, combined with the flexibility to query virtually any data source, can help empower your business to get more value from your data than ever before — all while keeping the data where it is and avoiding expensive transfers and engineering time to consolidate your data into one place for analysis. Presto!

Ashish Tadose is co-founder and principal software engineer at Ahana. Passionate about distributed systems, Ashish joined Ahana from WalmartLabs, where as principal engineer he built a multicloud data acceleration service powered by Presto while leading and architecting other products related to data discovery, federated query engines, and data governance. Previously, Ashish was a senior data architect at PubMatic where he designed and delivered a large-scale adtech data platform for reporting, analytics, and machine learning. Earlier in his career, he was a data engineer at VeriSign. Ashish is also an Apache committer and contributor to open source projects.

Das New Tech Forum bietet einen Ort, an dem Sie neue Unternehmenstechnologien in beispielloser Tiefe und Breite erkunden und diskutieren können. Die Auswahl ist subjektiv, basierend auf unserer Auswahl der Technologien, die wir für wichtig und für die Leser von größtem Interesse halten. akzeptiert keine Marketingmaterialien zur Veröffentlichung und behält sich das Recht vor, alle eingebrachten Inhalte zu bearbeiten. Senden Sie alle Anfragen an [email protected]