Aprende qué es PrestoDB: Motor SQL Distribuido

Última actualización: 28/04/2022

En esta entrada aprenderás qué es PrestoDB y cómo empezar a trabajar con este motor SQL para tu data lake.

PrestoDB Introduccion

¿Qué es PrestoDB?

Presto es un motor de consultas SQL open source distribuido diseñado para realizar consultas analíticas interactivas para big data. La característica más importante de PrestoDB es la capacidad de consultar los datos donde están almacenados y de diversas fuentes federando las consultas. Aporta una alta escalabilidad y buen rendimiento, así como una gran cantidad de conectores a fuentes de datos que optimizan las consultas paralelizando y escalando el procesamiento.

PrestoDB fue desarrollada por Facebook en el año 2012 para evitar que las consultas sobre Apache Hive realizaran tantas escrituras en disco. Presto consigue reducir las latencias respecto a Apache Hive con su arquitectura en memoria para realizar consultas interactivas. Tras el fork del proyecto de Presto original, surgieron dos proyectos principales: PrestoDB y PrestoSQL, que se pasó a llamar Trino. Presto está escrito en Java y usa ANSI SQL como lenguaje de consultas, con soporte a los tipos de datos definidos (integer, string, double, etc).

Soporta fuentes de datos no relacionales como HDFS, S3, Cassandra, MongoDB o HBase y fuentes de datos relacionales como MySQL, PostgreSQL, Redshift, Microsoft SQL Server y Teradata. También puede trabajar con formatos de fichero CSV, RCFile, JSON, SequenceFile, ORC, Avro y Parquet.

Los casos de uso más comunes por tanto son los que incluyen consultas interactivas y pipelines de ETL.

Arquitectura de PrestoDB

La arquitectura de presto es un motor MPP (Massively parallel processing). Puede escalar horizontalmente añadiendo más nodos de cómputo y separar éste del almacenamiento.

Existe un nodo coordinador del clúster que orquesta el resto de nodos a través de comunicaciones HTTP y acepta y planifica la ejecución de las consultas. Los nodos worker son los que procesan la consulta en memoria.

Esquema de arquitectura de PrestoDB
Esquema de arquitectura de PrestoDB

Presto consulta los datos donde se almacenan, sin la necesidad de mover los datos a un sistema analítico separado. Al no almacenar los datos, no requiere ninguna operación de redistribución de datos al añadir nodos de cómputo.

Los servicios Cloud AWS Athena, Amazon EMR y Dremio están basados en el motor de consulta de PrestoDB, aunque son alternativas con más soporte y compatibilidad.

Ventajas

  • Al federar las consultas, no necesita procesos de migración de datos
  • Escalabilidad horizontal: Aumento de paralelismo y velocidad de consulta
  • Puede ser una alternativa a Dremio, Athena o Databricks SQL
  • Integrado con AWS S3 y ADLS como repositorios de datos
  • La empresa Starbust ofrece la versión con soporte empresarial

Desventajas

  • No se integra en AWS Lake Formation directamente
  • No tiene la posibilidad de despliegue como servicio serverless en Cloud
  • Carece de dashboard integrado y de una interfaz para realizar consultas SQL o con la capacidad de escribir notebooks

Funcionamiento de PrestoDB

Los usuarios envían su consulta SQL al nodo coordinador, que parsea, planifica y distribuye su plan de ejecución a los nodos worker. Se crea un pipeline de ejecución con las fases de la consulta en forma de árbol jerárquico para minimizar las operaciones de tipo I/O sobre los discos. Por tanto, añadir más nodos worker aumenta el paralelismo y la velocidad de ejecución de las consultas.

Presto se enfoca en el uso de plugins como muchas herramientas open source. Tanto en conectores como en herramientas de terceros para realizar las consultas, por ejemplo no tiene un driver ODBC oficial ni una interfaz gráfica para las consultas.

Los conectores de Presto implementan las interfaces para comunicarse con las fuentes de datos, sus tablas y esquemas de una manera uniforme.

Cómo Empezar con Presto

Última versión de Presto disponible para su descarga: https://prestodb.io/download.html

Para ejecutar Presto, necesitarás la JDK 1.8 o superior instalada en tu sistema. Si deseas probar las versiones de desarrollo y últimos cambios, también tienes el enlace al repositorio de Github oficial: https://github.com/prestodb/presto

Desde Linux, puedes descargarlo y ejecutarlo directamente desde la terminal:

wget "https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.271.1/presto-server-0.271.1.tar.gz"
tar -xzvf presto-server-0.271.1.tar.gz
sudo mv presto-server-0.271.1 /opt/presto-server
sudo chown -R $USER:$USER /opt/presto-server
export PATH=$PATH:$PRESTO_HOME/bin

Para ejecutar un clúster de un solo nodo, ejecutaremos el coordinador y el worker en el mismo host. Este despliegue nos resultará útil para hacer pruebas y poder interactuar fácilmente con el sistema.

Editaremos los ficheros etc/node.properties (para los nodos) y etc/config.properties (para el coordinador). En el fichero config.properties estableceremos los parámetros de memoria y puertos. En el caso de querer desplegar varios nodos, tendremos que crear varios ficheros etc/node.properties con identificadores diferentes. Para ejecutar PrestoDB, deberemos usar el comando:

bin/launcher start

También, podemos editar el fichero etc/jvm.config, donde se especifica la configuración para la JVM.

Por defecto, podremos acceder a la interfaz web en el siguiente puerto: http://localhost:8080

Presto también dispone de una CLI, para conectarse a ella, desde la terminal se especificará la localización del servidor, el catálogo y el esquema:

presto \
    --server localhost:8080 \
    --catalog hive \
    --schema default

Ahora, puedes explorar los esquemas y tablas con comandos SQL:

SHOW CATALOGS;
SHOW SCHEMAS IN catalogo;
SHOW TABLES IN catalogo.esquema;
DESCRIBE catalogo.esquema.tabla;
SHOW STATS FOR tabla;

Curso Big Data Coursera

Cursos de Formación con Presto y Siguientes Pasos

Si te interesa aprender más sobre Presto y los motores de consulta SQL distribuidos, te recomiendo este curso de especialización en analítica Big Data con SQL ofrecido por Cloudera que ya han disfrutado más de 50000 alumnos. Tiene un fuerte componente práctico que te permitirá comprender las habilidades esenciales que necesitarás para trabajar con estas tecnologías de manera profesional.

Si prefieres centrarte en comprender específicamente PrestoDB, aquí tienes dos cursos que te recomiendo en la plataforma online Udemy:

Preguntas Frecuentes PrestoDB

Presto vs Apache Drill

Ambas tecnologías tienen un propósito similar. Presto fue desarrollado para optimizar las consultas SQL para analítica interactiva a través de conectores con otras tecnologías. Apache Drill, por otro lado no necesita definir el esquema en los conectores para descubrir o consultar datos.

PrestoDB vs PrestoSQL

Ambas tecnologías son el resultado de un fork en el proyecto de Presto original. PrestoDBs e ha centrado en consultas analíticas interactivas para big data, mientras que PrestoSQL no tiene un foco tan específico. En el año 2020, PrestoSQL se renombró como Trino.


A continuación, el vídeo-resumen. ¡No te lo pierdas!

Deja una respuesta