MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Uruchamianie zapytań analizy Big Data przy użyciu SQL i Presto

Presto to open-source, równolegle rozproszony silnik SQL do przetwarzania dużych zbiorów danych. Został opracowany od podstaw przez Facebooka. Pierwsze wewnętrzne wydanie miało miejsce w 2013 roku i było dość rewolucyjnym rozwiązaniem ich problemów z dużymi danymi.

Mając setki geolokalizowanych serwerów i petabajtów danych, Facebook zaczął szukać alternatywnej platformy dla swoich klastrów Hadoop. Ich zespół ds. infrastruktury chciał skrócić czas potrzebny na wykonanie zadań analitycznych wsadowych i uprościć opracowywanie potoku przy użyciu języka programowania powszechnie znanego w organizacji - SQL.

Według fundacji Presto „Facebook używa Presto do interaktywnych zapytań dotyczących kilku wewnętrznych magazynów danych, w tym ich hurtowni danych o wielkości 300 PB. Ponad 1000 pracowników Facebooka korzysta codziennie z Presto, aby uruchamiać ponad 30 000 zapytań, które w sumie skanują ponad petabajt każdego dnia”.

Chociaż Facebook ma wyjątkowe środowisko hurtowni danych, te same wyzwania są obecne w wielu organizacjach zajmujących się big data.

W tym blogu przyjrzymy się, jak skonfigurować podstawowe środowisko presto przy użyciu serwera Docker z pliku tar. Jako źródło danych skupimy się na źródle danych MySQL, ale może to być dowolny inny popularny RDBMS.

Uruchamianie Presto w środowisku Big Data

Zanim zaczniemy, rzućmy okiem na jego główne zasady architektury. Presto jest alternatywą dla narzędzi, które wysyłają zapytania do HDFS przy użyciu potoków zadań MapReduce — takich jak Hive. W przeciwieństwie do Hive Presto nie używa MapReduce. Presto działa ze specjalnym silnikiem wykonywania zapytań z operatorami wysokiego poziomu i przetwarzaniem w pamięci.

W przeciwieństwie do Hive Presto, może przesyłać strumieniowo dane przez wszystkie etapy jednocześnie, uruchamiając jednocześnie porcje danych. Jest przeznaczony do uruchamiania zapytań analitycznych ad hoc na pojedynczych lub rozproszonych heterogenicznych źródłach danych. Może sięgnąć z platformy Hadoop do wysyłania zapytań do relacyjnych baz danych lub innych magazynów danych, takich jak pliki płaskie.

Presto korzysta ze standardowego ANSI SQL, w tym agregacji, złączeń lub funkcji okna analitycznego. SQL jest dobrze znany i znacznie łatwiejszy w użyciu w porównaniu z MapReduce napisanym w Javie.

Wdrażanie Presto w Dockerze

Podstawową konfigurację Presto można wdrożyć za pomocą wstępnie skonfigurowanego obrazu Docker lub archiwum serwera presto.

Serwer docker i kontenery Presto CLI można łatwo wdrożyć za pomocą:

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

Możesz wybrać jedną z dwóch wersji serwera Presto. Wersja społecznościowa i wersja Enterprise firmy Starburst. Ponieważ zamierzamy uruchomić go w nieprodukcyjnym środowisku piaskownicy, w tym artykule użyjemy wersji Apache.

Wymagania wstępne

Presto jest w całości zaimplementowane w Javie i wymaga zainstalowania JVM w Twoim systemie. Działa na OpenJDK i Oracle Java. Minimalna wersja to Java 8u151 lub Java 11.

Aby pobrać JAVA JDK, odwiedź stronę https://openjdk.java.net/ lub https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Możesz sprawdzić swoją wersję Java za pomocą

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

Instalacja Presto

Aby zainstalować Presto, pobierzemy serwer tar i plik wykonywalny Presto CLI jar.

Plik tar będzie zawierał pojedynczy katalog najwyższego poziomu, presto-server-0.223, który nazwiemy katalogiem instalacyjnym.

$ 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

Dodatkowo Presto potrzebuje katalogu danych do przechowywania dzienników itp.

Zaleca się utworzenie katalogu danych poza katalogiem instalacyjnym.

$ mkdir -p ~/data/presto/

Ta lokalizacja to miejsce, w którym rozpoczynamy rozwiązywanie problemów.

Konfigurowanie Presto

Zanim zaczniemy naszą pierwszą instancję, musimy stworzyć kilka plików konfiguracyjnych. Zacznij od utworzenia katalogu etc/ w katalogu instalacyjnym. Ta lokalizacja będzie zawierać następujące pliki konfiguracyjne:

itp/

  • Właściwości węzła - konfiguracja środowiska węzła
  • Konfiguracja JVM (jvm.config) — konfiguracja wirtualnej maszyny Java
  • Właściwości konfiguracji(config.properties) — konfiguracja dla serwera Presto
  • Właściwości katalogu — konfiguracja łączników (źródła danych)
  • Właściwości dziennika — konfiguracja rejestratorów

Poniżej znajdziesz podstawową konfigurację do uruchomienia piaskownicy Presto. Więcej informacji można znaleźć w dokumentacji.

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

Podstawowa struktura etc/ może wyglądać następująco:

Następnym krokiem jest skonfigurowanie łącznika MySQL.
Zamierzamy połączyć się z jednym z 3 węzłów Klastra MariaDB.

I kolejna samodzielna instancja z Oracle MySQL 5.7.

Łącznik MySQL umożliwia wykonywanie zapytań i tworzenie tabel w zewnętrznej bazie danych MySQL. Można to wykorzystać do łączenia danych między różnymi systemami, takimi jak MariaDB i MySQL firmy Oracle.

Presto wykorzystuje złącza wtykowe, a konfiguracja jest bardzo łatwa. Aby skonfigurować łącznik MySQL, utwórz plik właściwości katalogu w etc/catalog o nazwie na przykład mysql.properties, aby zamontować łącznik MySQL jako katalog mysql. Każdy z plików reprezentujących połączenie z innym serwerem. W tym przypadku mamy dwa pliki:

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

Uruchamianie Presto

Gdy wszystko jest ustawione, czas uruchomić instancję Presto. Aby uruchomić presto, przejdź do katalogu bin podczas instalacji preso i uruchom następujące polecenie:

$ bin/launcher start
Started as 18363

Aby zatrzymać uruchomienie Presto

$ bin/launcher stop

Teraz, gdy serwer jest uruchomiony i działa, możemy połączyć się z Presto za pomocą CLI i zapytać o bazę danych MySQL.

Aby uruchomić konsolę Presto:

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

Teraz możemy wysyłać zapytania do naszych baz danych przez 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]

Obie bazy danych klaster MariaDB i MySQL zostały zasilane bazą danych pracowników.
wget https://github.com/dataharmer/test_db/archive/master.zip

mysql -uroot -psecret < employees.sql

Status zapytania jest również widoczny w konsoli internetowej Presto:http://localhost:8080/ui/#

Omówienie klastra Presto

Wniosek

Wiele znanych firm (takich jak Airbnb, Netflix, Twitter) korzysta z Presto w celu uzyskania niskich opóźnień. To bez wątpienia bardzo ciekawe oprogramowanie, które może wyeliminować konieczność uruchamiania ciężkich procesów hurtowni danych ETL. W tym blogu pokrótce przyjrzeliśmy się konektorowi MySQL, ale można go użyć do analizy danych z HDFS, magazynów obiektów, RDBMS (SQL Server, Oracle, PostgreSQL), Kafki, Cassandra, MongoDB i wielu innych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wdrażanie MariaDB Sharding za pomocą Spidera za pomocą ClusterControl

  2. Porównanie wysokiej dostępności bazy danych — replikacja MySQL/MariaDB i Oracle Data Guard

  3. Jak działa LENGTH() w MariaDB

  4. Nazwane polecenia MariaDB

  5. Migracja Amazon RDS (MySQL lub MariaDB) na serwer lokalny