Translate

martes, 11 de septiembre de 2018

Presto


Presto es una herramiento diseñada para correr consultas sobre grandes cantidades de datos usando consultas distribuidas, trabajando en el orden de los petabytes de datos.

Permite interactuar con Hadoop y su HDFS. Fue diseñado como una alternativa a otras herramientas que consultaba el HDFS usando conexiones a los jobs de MapReduce, como lo hace Hive.

Pero Presto no solo se limita a trabajar sobre el HDFS, también tiene un API que permite definir diferentes tipos de fuentes de datos, incluidos base de datos relacionales, base de datos no relacionales, archivos locales, entre otras fuentes.

Fue pensado para manejar datawarehouses, analytics, análisis de datos, agregación de grandes cantidades de datos o generar reportes. Esas características, permite definir a Presco como un OLAP (Online analytical Processing).

Presto es una herramienta distribuida basada en un motor SQL para realizar análisis interactivos contra bases de datos de todos los tamaños posibles.

Entre las características podemos nombrar:
  • Presto permite consultar datos desde varias fuentes, incluido Hive, Cassandra, bases de datos relacionales, archivos planos o incluso datastores privados, lo que permite cruzar datos desde muchas fuentes al mismo tiempo sin mucho esfuerzo.
  • Esta herramienta está apuntada para análisis donde los tiempos de respuestas son críticos para las tomas de decisiones.

Existen 2 tipos de servidores, los coordinadores (coordinators)  y los trabajadores (workers) y la comunicación entre ambos tipos de servidores es por REST API. Con fines de desarrollo y testeo, se puede configurar un nodo como coordinador y trabajador al mismo tiempo.

Los coordinadores son los nodos donde el “cliente” se conecta para enviarles las consultas que requiere. Son los responsables de parsear las sentencias, generar los planes de ejecución de las consultas, coordinar los trabajadores (mantiene un tracking de que está haciendo cada trabajador para coordinación).

Los trabajadores son responsables de ejecutar las tareas que el coordinador requiere y de procesar los datos para cumplirla. Se los configura que para que al momento de iniciar, se reporten al coordinador correspondiente para que éste los tenga en cuenta para las tareas futuras.

Un conector permite a los trabajadores conectarse a fuentes de datos, como Hive o una base de datos relacional. Se pueden pensar los mismos como un “driver” para cada base de datos en particular.

A la vez existe el concepto de catálogo este contiene esquemas que referencian a los datos a través del conector. Se configuran en archivos “properties” dentro de la carpeta de configuración de Presto.

Y un esquema es una manera de agrupación de tablas que pueden ser consultadas por los trabajadores. El mapeo de schemas queda delegado a cada tipo de conector en particular.

Y las tablas es un conjunto de filas desordenadas que se organizan en columnas con tipos definidos (parecido a una base de datos relacional). Este mapeo de datos a columnas y tipos lo define cada conector en particular.

Presto ejecuta consultas SQL basadas en el ANSI-SQL. Cuando Presto parsea una sentencia, convierte a esta en una consulta SQL y crea un plan de ejecución que va a distribuir entre sus trabajadores asociados.

La diferencia entre una sentencia y una consulta es que la sentencia es “texto plano” mientras que la consulta en si, es el plan asociado a esa sentencia. La consulta encapsula lo que son las etapas, tareas, splits, conectores y demás recursos necesarios para cumplir con esas sentencia.

Cuando Presto ejecuta una consulta, divide a ésta en etapas dentro del plan. Estas etapas quedan definidas como un árbol de ejecución, donde cada etapa tiene una etapa superior que se encarga de juntar los resultados de las etapas inferiores.

Y como si fuera poco Presto es open source.