Presto ist eine parallel verteilte Open-Source-SQL-Engine für die Big-Data-Verarbeitung. Es wurde von Grund auf von Facebook entwickelt. Die erste interne Veröffentlichung fand 2013 statt und war eine ziemlich revolutionäre Lösung für ihre Big-Data-Probleme.
Angesichts der Hunderte von geolokalisierten Servern und Petabytes an Daten begann Facebook, nach einer alternativen Plattform für seine Hadoop-Cluster zu suchen. Ihr Infrastrukturteam wollte die Zeit reduzieren, die zum Ausführen von Analyse-Batch-Jobs benötigt wird, und die Pipeline-Entwicklung vereinfachen, indem es eine in der Organisation weithin bekannte Programmiersprache – SQL – verwendete.
Laut der Presto-Stiftung „verwendet Facebook Presto für interaktive Abfragen gegen mehrere interne Datenspeicher, einschließlich ihres 300-PB-Data-Warehouse. Über 1.000 Facebook-Mitarbeiter verwenden Presto täglich, um mehr als 30.000 Abfragen auszuführen, die insgesamt mehr als ein Petabyte pro Tag scannen.“
Während Facebook über eine außergewöhnliche Data-Warehouse-Umgebung verfügt, gibt es die gleichen Herausforderungen in vielen Organisationen, die mit Big Data zu tun haben.
In diesem Blog werfen wir einen Blick darauf, wie Sie eine grundlegende Presto-Umgebung mit einem Docker-Server aus der tar-Datei einrichten. Als Datenquelle konzentrieren wir uns auf die MySQL-Datenquelle, aber es könnte auch jedes andere gängige RDBMS sein.
Ausführen von Presto in einer Big-Data-Umgebung
Bevor wir beginnen, werfen wir einen kurzen Blick auf die wichtigsten Architekturprinzipien. Presto ist eine Alternative zu Tools, die HDFS mithilfe von Pipelines von MapReduce-Jobs wie Hive abfragen. Im Gegensatz zu Hive verwendet Presto kein MapReduce. Presto wird mit einer speziellen Abfrageausführungs-Engine mit High-Level-Operatoren und In-Memory-Verarbeitung ausgeführt.
Im Gegensatz zu Hive kann Presto Daten durch alle Stufen auf einmal streamen, wobei Datenblöcke gleichzeitig ausgeführt werden. Es wurde entwickelt, um analytische Ad-hoc-Abfragen gegen einzelne oder verteilte heterogene Datenquellen auszuführen. Es kann von einer Hadoop-Plattform aus erreichen, um relationale Datenbanken oder andere Datenspeicher wie Flatfiles abzufragen.
Presto verwendet Standard-ANSI-SQL, einschließlich Aggregationen, Verknüpfungen oder Analysefensterfunktionen. SQL ist allgemein bekannt und viel einfacher zu verwenden als MapReduce, das in Java geschrieben wurde.
Bereitstellen von Presto in Docker
Die grundlegende Presto-Konfiguration kann mit einem vorkonfigurierten Docker-Image oder Presto-Server-Tarball bereitgestellt werden.
Der Docker-Server und die Presto-CLI-Container können einfach bereitgestellt werden mit:
docker run -d -p 127.0.0.1:8080:8080 --name presto starburstdata/presto
docker exec -it presto presto-cli
Sie können zwischen zwei Versionen des Presto-Servers wählen. Community-Version und Enterprise-Version von Starburst. Da wir es in einer Nicht-Produktions-Sandbox-Umgebung ausführen werden, verwenden wir in diesem Artikel die Apache-Version.
Voraussetzungen
Presto ist vollständig in Java implementiert und erfordert die Installation von JVM auf Ihrem System. Es läuft sowohl auf OpenJDK als auch auf Oracle Java. Die Mindestversion ist Java 8u151 oder Java 11.
Um JAVA JDK herunterzuladen, besuchen Sie https://openjdk.java.net/ oder https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Sie können Ihre Java-Version mit
überprüfen$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.222-b10, mixed mode)
Presto-Installation
Um Presto zu installieren, laden wir Server tar und Presto CLI jar ausführbar herunter.
Der Tarball enthält ein einzelnes Verzeichnis der obersten Ebene, presto-server-0.223, das wir das Installationsverzeichnis nennen werden.
$ wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.223/presto-server-0.223.tar.gz
$ tar -xzvf presto-server-0.223.tar.gz
$ cd presto-server-0.223/
$ wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.223/presto-cli-0.223-executable.jar
$ mv presto-cli-0.223-executable.jar presto
$ chmod +x presto
Außerdem benötigt Presto ein Datenverzeichnis zum Speichern von Protokollen usw.
Es wird empfohlen, ein Datenverzeichnis außerhalb des Installationsverzeichnisses zu erstellen.
$ mkdir -p ~/data/presto/
An diesem Ort beginnen wir mit der Fehlerbehebung.
Konfigurieren von Presto
Bevor wir unsere erste Instanz starten, müssen wir eine Reihe von Konfigurationsdateien erstellen. Beginnen Sie mit der Erstellung eines etc/-Verzeichnisses innerhalb des Installationsverzeichnisses. Dieser Speicherort enthält die folgenden Konfigurationsdateien:
etc/
- Knoteneigenschaften - Umgebungskonfiguration des Knotens
- JVM-Konfiguration (jvm.config) - Java Virtual Machine-Konfiguration
- Config Properties(config.properties) -Konfiguration für den Presto-Server
- Katalogeigenschaften - Konfiguration für Konnektoren (Datenquellen)
- Protokolleigenschaften – Loggerkonfiguration
Nachfolgend finden Sie einige grundlegende Konfigurationen zum Ausführen der Presto-Sandbox. Weitere Einzelheiten finden Sie in der Dokumentation.
vi etc/config.properties
Config.properties
coordinator = true
node-scheduler.include-coordinator = true
http-server.http.port = 8080
query.max-memory = 5GB
query.max-memory-per-node = 1GB
discovery-server.enabled = true
discovery.uri = http://localhost:8080
vi etc/jvm.config
-server
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
vi etc/log.properties
com.facebook.presto = INFO
vi etc/node.properties
node.environment = production
node.id = ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir = /Users/bartez/data/presto
Die grundlegende Struktur von etc/ kann wie folgt aussehen:
Der nächste Schritt besteht darin, den MySQL-Connector einzurichten.
Wir werden eine Verbindung zu einem der 3 Knoten des MariaDB-Clusters herstellen.
Und eine weitere eigenständige Instanz, auf der Oracle MySQL 5.7 ausgeführt wird.
Der MySQL-Connector ermöglicht das Abfragen und Erstellen von Tabellen in einer externen MySQL-Datenbank. Dies kann verwendet werden, um Daten zwischen verschiedenen Systemen wie MariaDB und MySQL von Oracle zusammenzuführen.
Presto verwendet steckbare Anschlüsse und die Konfiguration ist sehr einfach. Um den MySQL-Connector zu konfigurieren, erstellen Sie eine Katalogeigenschaftendatei in etc/catalog mit dem Namen beispielsweise mysql.properties, um den MySQL-Connector als mysql-Katalog einzuhängen. Jede der Dateien stellt eine Verbindung zu einem anderen Server dar. In diesem Fall haben wir zwei Dateien:
vi etc/catalog/mysq.properties:
connector.name=mysql
connection-url=jdbc:mysql://node1.net:3306
connection-user=bart
connection-password=secret
vi etc/catalog/mysq2.properties
connector.name=mysql
connection-url=jdbc:mysql://node4.net:3306
connection-user=bart2
connection-password=secret
Presto ausführen
Wenn alles eingestellt ist, ist es an der Zeit, die Presto-Instanz zu starten. Um Presto zu starten, gehen Sie unter Preso-Installation in das bin-Verzeichnis und führen Sie Folgendes aus:
$ bin/launcher start
Started as 18363
So stoppen Sie die Ausführung von Presto
$ bin/launcher stop
Wenn der Server jetzt läuft, können wir uns mit der CLI mit Presto verbinden und die MySQL-Datenbank abfragen.
So starten Sie die Presto-Konsolenausführung:
./presto --server localhost:8080 --catalog mysql --schema employees
Jetzt können wir unsere Datenbanken per CLI abfragen.
presto:mysql> select * from mysql.employees.departments;
dept_no | dept_name
---------+--------------------
d009 | Customer Service
d005 | Development
d002 | Finance
d003 | Human Resources
d001 | Marketing
d004 | Production
d006 | Quality Management
d008 | Research
d007 | Sales
(9 rows)
Query 20190730_232304_00019_uq3iu, FINISHED, 1 node
Splits: 17 total, 17 done (100,00%)
0:00 [9 rows, 0B] [81 rows/s, 0B/s]
Beide Datenbanken, MariaDB-Cluster und MySQL, wurden mit der Mitarbeiterdatenbank gefüttert.
wget https://github.com/datacharmer/test_db/archive/master.zip
mysql -uroot -psecret < employees.sql
Der Status der Abfrage ist auch in der Presto-Webkonsole sichtbar:http://localhost:8080/ui/#
Presto-Cluster-ÜbersichtSchlussfolgerung
Viele bekannte Unternehmen (wie Airbnb, Netflix, Twitter) setzen Presto für eine Leistung mit geringer Latenz ein. Es handelt sich zweifellos um eine sehr interessante Software, die die Ausführung umfangreicher ETL-Data-Warehouse-Prozesse überflüssig machen kann. In diesem Blog haben wir nur einen kurzen Blick auf den MySQL-Connector geworfen, aber Sie können ihn verwenden, um Daten aus HDFS, Objektspeichern, RDBMS (SQL Server, Oracle, PostgreSQL), Kafka, Cassandra, MongoDB und vielen anderen zu analysieren.