sql >> Database >  >> RDS >> MariaDB

Big Data Analytics-query's uitvoeren met SQL en Presto

Presto is een open-source, parallel gedistribueerde SQL-engine voor de verwerking van big data. Het is vanaf de grond af ontwikkeld door Facebook. De eerste interne release vond plaats in 2013 en was een behoorlijk revolutionaire oplossing voor hun big data-problemen.

Met de honderden geografisch gelokaliseerde servers en petabytes aan gegevens ging Facebook op zoek naar een alternatief platform voor hun Hadoop-clusters. Hun infrastructuurteam wilde de tijd die nodig was voor het uitvoeren van analysebatchtaken verminderen en de ontwikkeling van pijplijnen vereenvoudigen door gebruik te maken van programmeertaal die algemeen bekend is in de organisatie - SQL.

Volgens de Presto Foundation:“Facebook gebruikt Presto voor interactieve zoekopdrachten op verschillende interne datastores, waaronder hun 300PB datawarehouse. Meer dan 1.000 Facebook-medewerkers gebruiken Presto dagelijks om meer dan 30.000 zoekopdrachten uit te voeren die in totaal meer dan een petabyte per dag scannen.”

Hoewel Facebook een uitzonderlijke datawarehouse-omgeving heeft, zijn dezelfde uitdagingen aanwezig in veel organisaties die met big data te maken hebben.

In deze blog bekijken we hoe je een presto-basisomgeving opzet met een Docker-server uit het tar-bestand. Als gegevensbron zullen we ons concentreren op de MySQL-gegevensbron, maar dit kan elke andere populaire RDBMS zijn.

Presto gebruiken in een big data-omgeving

Laten we, voordat we beginnen, even kijken naar de belangrijkste architectuurprincipes. Presto is een alternatief voor tools die HDFS opvragen met behulp van pijplijnen van MapReduce-taken, zoals Hive. In tegenstelling tot Hive gebruikt Presto MapReduce niet. Presto wordt uitgevoerd met een speciale engine voor het uitvoeren van query's met operators op hoog niveau en verwerking in het geheugen.

In tegenstelling tot Hive kan Presto gegevens door alle fasen tegelijk streamen en tegelijkertijd gegevensblokken uitvoeren. Het is ontworpen om ad-hoc analytische query's uit te voeren op enkele of gedistribueerde heterogene gegevensbronnen. Het kan vanuit een Hadoop-platform reiken om relationele databases of andere gegevensarchieven zoals platte bestanden te doorzoeken.

Presto gebruikt standaard ANSI SQL inclusief aggregaties, joins of analytische vensterfuncties. SQL is bekend en veel gemakkelijker te gebruiken in vergelijking met MapReduce geschreven in Java.

Presto implementeren in Docker

De basisconfiguratie van Presto kan worden geïmplementeerd met een vooraf geconfigureerde Docker-image of presto-server-tarball.

De docker-server en Presto CLI-containers kunnen eenvoudig worden ingezet met:

docker run -d -p 127.0.0.1:8080:8080 --name presto starburstdata/presto
docker exec -it presto presto-cli

U kunt kiezen tussen twee Presto-serverversies. Community-versie en Enterprise-versie van Starburst. Aangezien we het in een niet-productie-sandbox-omgeving gaan uitvoeren, zullen we de Apache-versie in dit artikel gebruiken.

Vereisten

Presto is volledig in Java geïmplementeerd en vereist dat JVM op uw systeem is geïnstalleerd. Het draait op zowel OpenJDK als Oracle Java. De minimale versie is Java 8u151 of Java 11.

Ga om JAVA JDK te downloaden naar https://openjdk.java.net/ of https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

U kunt uw Java-versie controleren met

$ 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-installatie

Om Presto te installeren gaan we server tar en Presto CLI jar executable downloaden.

De tarball bevat een enkele directory op het hoogste niveau, presto-server-0.223, die we de installatiedirectory zullen noemen.

$ 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

Bovendien heeft Presto een gegevensmap nodig voor het opslaan van logs, enz.

Het wordt aanbevolen om een ​​gegevensmap te maken buiten de installatiemap.

$ mkdir -p ~/data/presto/

Deze locatie is de plaats waar we beginnen met het oplossen van problemen.

Presto configureren

Voordat we onze eerste instantie starten, moeten we een aantal configuratiebestanden maken. Begin met het maken van een etc/-map in de installatiemap. Deze locatie bevat de volgende configuratiebestanden:

enz/

  • Knooppunteigenschappen - omgevingsconfiguratie knooppunt
  • JVM-configuratie (jvm.config) - Java Virtual Machine-configuratie
  • Config Properties(config.properties) -configuratie voor de Presto-server
  • Cataloguseigenschappen - configuratie voor connectoren (gegevensbronnen)
  • Logeigenschappen - Configuratie van loggers

Hieronder vindt u enkele basisconfiguraties om Presto-sandbox uit te voeren. Bezoek de documentatie voor meer details.

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

De basisstructuur etc/ kan er als volgt uitzien:

De volgende stap is het opzetten van de MySQL-connector.
We gaan verbinding maken met een van de 3 nodes MariaDB Cluster.

En nog een zelfstandige instantie met Oracle MySQL 5.7.

Met de MySQL-connector kunt u tabellen opvragen en maken in een externe MySQL-database. Dit kan worden gebruikt om gegevens tussen verschillende systemen, zoals MariaDB en MySQL van Oracle, samen te voegen.

Presto maakt gebruik van pluggable connectoren en de configuratie is zeer eenvoudig. Om de MySQL-connector te configureren, maakt u een bestand met cataloguseigenschappen in etc/catalog met de naam bijvoorbeeld mysql.properties, om de MySQL-connector te koppelen als de mysql-catalogus. Elk van de bestanden vertegenwoordigt een verbinding met een andere server. In dit geval hebben we twee bestanden:

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 draaien

Als alles is ingesteld, is het tijd om Presto-instantie te starten. Om presto te starten, gaat u naar de bin-map onder preso-installatie en voert u het volgende uit:

$ bin/launcher start
Started as 18363

Presto-run stoppen

$ bin/launcher stop

Wanneer de server nu actief is, kunnen we verbinding maken met Presto met CLI en de MySQL-database opvragen.

Presto console run starten:

./presto --server localhost:8080 --catalog mysql --schema employees

Nu kunnen we onze databases opvragen via CLI.

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 databases MariaDB-cluster en MySQL zijn gevoed met de werknemersdatabase.
wget https://github.com/datacharmer/test_db/archive/master.zip

mysql -uroot -psecret < employees.sql

De status van de query is ook zichtbaar in de Presto-webconsole:http://localhost:8080/ui/#

Presto-clusteroverzicht

Conclusie

Veel bekende bedrijven (zoals Airbnb, Netflix, Twitter) gebruiken Presto voor prestaties met een lage latentie. Het is zonder twijfel zeer interessante software die de noodzaak voor het uitvoeren van zware ETL-datawarehouse-processen kan elimineren. In deze blog hebben we een korte blik geworpen op de MySQL-connector, maar je kunt deze gebruiken om gegevens te analyseren van HDFS, objectstores, RDBMS (SQL Server, Oracle, PostgreSQL), Kafka, Cassandra, MongoDB en vele anderen.


  1. Hoe de PATINDEX()-functie werkt in SQL Server (T-SQL)

  2. Als GETDATE() op veel plaatsen wordt gebruikt, is het dan beter om een ​​variabele te gebruiken?

  3. 10 technieken voor het maken van formulieren in Microsoft Access

  4. mysql selecteer top n max waarden