Presto – 1 (Single Node)

Presto‘nun ne olduğunu anlamak için veri üzerinde sorgulama yapma sürecinin karanlık dehlizlerine (evet bu aralar fazla roman okuyorum 🙂 ) inilmesine gerek yok. Kısaca şu söylenebilir; bir veri tutma altyapısının üzerinde en az maliyetle sorgulama yapabilmemizi sağlayan query engine‘lerden biridir.

Query Engine kavramı aslında pek çok noktada veri ile ilgilenenlerin karşısına çıkmıştır. Örnek olarak bir rdbms üzerinde tablolardan veri sorgulamak istendiğinde yazılan sql sorgusunu yorumlayıp, maliyetide optimize ederek verinin dönmesini sağlayan yapı Query Engine’dir. Bunlara rdbms’ler üzerinde çalışan sql engineler, büyük veri üzerinde farklı mantıklar ve kaynaklardan beslenerek çalışan yapılar; Spark, Hive, Drill… gibi bir çok yapı örnek gösterilebilir.

Presto, veri ambarı ve analitiğini yönetmek için tasarlanmıştır; veri analizi, büyük miktarda veriyi toplama ve raporlar üretme. Bu iş yükleri genellikle Çevrimiçi Analitik İşleme (OLAP) olarak sınıflandırılır. Presto (veya PrestoDB), büyük veri ortamlarında etkileşimli analitik iş yüklerini çalıştırmak için en iyi şekilde kullanılan dağıtılmış bir SQL sorgu motorudur. Presto; HDFS, MySQL, Cassandra, Kafka veya Hive gibi birçok farklı veri kaynağında sorgulama yapılabilmesini sağlar.

Prestonun diğer query enginelere göre tercih edilme sebeplerinden bazıları şöyle;

Hızlı – Presto, optimize edilmiş sorgu motoru sayesinde inanılmaz derecede hızlıdır ve etkileşimli analiz için çok uygundur.
Esnek – Presto, veri kaynakları için tak ve çalıştır modeliyle çalıştığı için oldukça esnektir. Presto ile farklı veri kaynakları arasında istenen verileri birleştirmek ve sorgulamak çok kolaydır.
ANSI SQL – Presto, tanınan SQL dili olan ANSI SQL’i takip eder ve bu nedenle fazla ek yük olmadan kolay sorgu geçişine izin vermeye yardımcı olur.
Dağıtık Mimari – Tasarım gereği Presto, sorgularında dağıtılmış sorgu motoru mantığıyla öne çıkar.

Presto Cluster Yapısı

Presto CLI: Presto ile sorgulama yapılmasını sağlayan komut satırı arayüzüdür.
Coordinator: İfadeleri ayrıştırmaktan, sorguları planlamaktan ve Presto worker node’larını yönetmekten sorumlu sunucudur.
Worker: Görevlerin yürütülmesinden ve verilerin işlenmesinden sorumlu olan sunucudur.

Kurulum
Basit bir kurulum senaryosu olarak Presto ve Postgreyi birlikte içeren bir docker-compose dosyası tanımladım. Yalnızca arayüzden sorgulama imkanı sunan bir senaryo, ilerleyen yazılarda BI toolları üzerinden bir senaryoda deneyip paylaşılabilir.

 presto_compose.yaml
services:
  app:
    image: ahanaio/prestodb-sandbox
    container_name: presto
    volumes:
      - type: bind
        source: ./postgresql.properties
        target: /opt/presto-server/etc/catalog/postgresql.properties
    ports:
      - "8080:8080"

  db:
    image: postgres:12.2
    container_name: postgre_presto
    restart: always
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
      PGDATA: /var/lib/postgresql/data
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - "54332:5432"

volumes:
  db-data:

Compose içinde erişilecek db’lerin connection tanımlarını içeren .properties dosyasının source ve target yollarıda mevcut. Bu örnek kurulum senaryosu için Postgre DB bağlantı tanımlamasını içeren postgresql.properties dosyasının içeriği aşağıdaki gibidir.

 postgresql.properties
connector.name=postgresql
connection-url=jdbc:postgresql://postgre_presto:5432/postgres
connection-user=admin
connection-password=secret

Compose dosyası çalıştırılarak Presto Cluster‘ı ayağı kaldırılır.

alimesut@alimesut-XPS:~/home/alimesut/DEV/Presto $ docker-compose -f presto_compose.yaml up -d

Presto-CLI uygulaması çalıştırılır.

alimesut@alimesut-XPS:~/home/alimesut/DEV/Presto $ docker exec -it presto presto-cli

presto-cli‘da catalog yani connector tanımı yapılmış data source’lar şu şekilde sorgulanır;

presto> SHOW CATALOGS;
  Catalog   
------------
 jmx        
 memory     
 postgresql 
 system     
 tpcds      
 tpch       
(6 rows)

Query 20210715_175018_00001_mhurf, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00 [0 rows, 0B] [0 rows/s, 0B/s]

Presto üzerinden Postgre db’deki schemalar şu şekilde listelenir;

presto> SHOW SCHEMAS FROM POSTGRESQL;
       Schema       
--------------------
 ext                
 information_schema 
 pg_catalog         
 public             
(4 rows)

Query 20210715_175021_00002_mhurf, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
0:00 [4 rows, 57B] [25 rows/s, 368B/s]

Presto üzerinden ansi sql ile Postgre db’ye sorgular şu şekilde atılır;

presto> SELECT * FROM POSTGRESQL.PUBLIC.PISA;
 id | rank |   country   | test_category | score 
----+------+-------------+---------------+-------
  1 |    1 | Albania     | Math          |   413 
  2 |    2 | Australia   | Math          |   493 
  3 |    3 | Austria     | Math          |   496 
  4 |    4 | Belgium     | Math          |   506 
  5 |    5 | Bulgaria    | Math          |   441 
  6 |    6 | Brazil      | Math          |   377 
  7 |    7 | Canada      | Math          |   515 
  8 |    8 | Switzerland | Math          |   521 
  9 |    9 | Chile       | Math          |   422 
 10 |   10 | Colombia    | Math          |   389 
(10 rows)

Query 20210715_175023_00003_mhurf, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
0:00 [10 rows, 0B] [64 rows/s, 0B/s]

Serinin 2. yazısında görüşmek üzere.🖐

Kaynaklar:

-Postgre Connector değişkenleri için kullanılan .properties parametreleri;
https://prestodb.io/docs/current/connector/postgresql.html
-Presto cons-pros;
https://www.trustradius.com/products/presto/reviews?qs=pros-and-cons
-Presto sunumu video;
https://www.youtube.com/watch?v=zLUs6ept1Hs

__________________________________________________________________________

Ali Mesut Karadeniz

Yorum bırakın