Ejecutar consultas de Trino 2.7 veces más rápido con Amazon EMR 6.15.0

Trino es un motor de consultas SQL distribuido de código abierto diseñado para cargas de trabajo analíticas interactivas. En AWS, puedes ejecutar Trino en Amazon EMR, donde tienes la flexibilidad de ejecutar tu versión preferida de Trino de código abierto en instancias de Amazon EC2 que administres, o en Athena de Amazon para una experiencia sin servidor. Al utilizar Trino en Amazon EMR o Athena, obtienes las últimas innovaciones de la comunidad de código abierto junto con optimizaciones patentadas desarrolladas por AWS.

A partir de Amazon EMR 6.8.0 y la versión 2 del motor Athena, AWS ha estado implementando mejoras en el comportamiento del motor y en el plan de consultas que mejoran el rendimiento de las consultas en Trino. En este artículo, comparamos Amazon EMR 6.15.0 con Trino 426 de código abierto y demostramos que las consultas TPC-DS se ejecutaron hasta 2.7 veces más rápido en Amazon EMR 6.15.0 con Trino 426 en comparación con Trino 426 de código abierto. Más adelante, explicamos algunas de las optimizaciones de rendimiento desarrolladas por AWS que contribuyen a estos resultados.

Configuración de referencia

En nuestras pruebas, utilizamos un conjunto de datos de 3 TB almacenado en Amazon S3 en formato Parquet comprimido, con los metadatos de bases de datos y tablas almacenados en el Catálogo de datos de AWS Glue. Este benchmark utiliza el esquema de datos TPC-DS y las relaciones de tablas sin modificar. Las tablas de hechos están particionadas en la columna de fecha y contienen entre 200 y 2100 particiones. No se contaba con estadísticas de tablas y columnas para ninguna de las tablas. Utilizamos consultas TPC-DS del repositorio de github de Trino sin modificación. Las consultas de referencia se ejecutaron secuencialmente en dos clústeres de Amazon EMR 6.15.0 diferentes: uno con Trino 426 de Amazon EMR y otro con Trino 426 de código abierto. Ambos clústeres emplearon 1 coordinador r5.4xlarge y 20 instancias de trabajo r5.4xlarge.

Resultados obtenidos

Nuestros benchmarks muestran un rendimiento consistentemente mejor con Trino en Amazon EMR 6.15.0 en comparación con Trino de código abierto. El tiempo total de ejecución de las consultas de Trino en Amazon EMR fue 2.7 veces más rápido que en código abierto. El siguiente gráfico ilustra las mejoras de rendimiento medidas en cuanto al tiempo total de ejecución de las consultas de referencia.

La mayoría de las consultas TPC-DS demostraron mejoras de rendimiento hasta cinco veces más rápidas en comparación con Trino de código abierto. Algunas consultas presentaron un rendimiento aún mayor, como la consulta 72, que experimentó una mejora de 160 veces. El siguiente gráfico muestra las 10 consultas TPC-DS principales con la mayor mejora en el tiempo de ejecución. Para una representación concisa y para evitar asimetrías en las mejoras de rendimiento en el gráfico, excluimos q72.

Mejoras en el rendimiento

Tras entender las mejoras de rendimiento con Trino en Amazon EMR, profundicemos en algunas de las innovaciones clave desarrolladas por el equipo de ingeniería de AWS que contribuyen a estas mejoras.

Elegir un mejor orden y tipo de unión es fundamental para mejorar el rendimiento de las consultas, ya que puede impactar la cantidad de datos leídos de una tabla específica, la cantidad de datos transferidos a las etapas intermedias a través de la red y la cantidad de memoria necesaria para acumular una tabla hash para facilitar una unión. Las decisiones sobre el orden de unión y los algoritmos de unión suelen ser tareas realizadas por optimizadores basados en costos, los cuales emplean estadísticas para mejorar los planes de consultas al decidir cómo se unen las tablas y subconsultas.

No obstante, las estadísticas de las tablas a menudo no están disponibles, están desactualizadas o resultan demasiado costosas de recopilar en tablas extensas. Cuando las estadísticas no están disponibles, Amazon EMR y Athena utilizan metadatos de archivos S3 para optimizar los planes de consulta. Estos metadatos se emplean para inferir subconsultas y tablas pequeñas en la consulta, determinando así el orden o tipo óptimo de unión. Por ejemplo, considera la siguiente consulta:

SELECT ss_promo_sk FROM store_sales ss, store_returns sr, call_center cc WHERE
ss.ss_cdemo_sk = sr.sr_cdemo_sk AND ss.ss_customer_sk = cc.cc_call_center_sk
AND cc_sq_ft > 0

El orden de unión sintáctica es store_sales unido a store_returns unido a call_center. Con las reglas de optimización de selección de orden y tipo de unión de Amazon EMR, se establece el orden de unión óptimo incluso si no existen estadísticas para estas tablas. En el caso de la consulta anterior, si call_center se considera una tabla pequeña tras estimar su tamaño aproximado a través de los metadatos del archivo S3, las reglas de optimización de unión de EMR unirán primero store_sales con call_center y convertirán la unión en una unión de transmisión, acelerando la consulta y reduciendo el uso de memoria. Reordenar las uniones minimiza el tamaño del resultado intermedio, lo que contribuye a reducir aún más el tiempo total de ejecución de la consulta.

Con Amazon EMR 6.10.0 y versiones posteriores, las optimizaciones de unión basadas en metadatos de archivos S3 están habilitadas de forma predeterminada. Si utilizas Amazon EMR 6.8.0 o 6.9.0, puedes activar estas optimizaciones configurando las propiedades de sesión de los clientes de Trino o añadiendo las siguientes propiedades al archivo de configuración trino-config al crear tu clúster. Consulta la guía de configuración de aplicaciones para más detalles sobre cómo anular la configuración predeterminada de una aplicación.

Configuración para la selección del tipo de unión:

session property: rule_based_join_type_selection=true
config property: rule-based-join-type-selection=true

Configuración para reordenar las uniones:

session property: rule_based_join_reorder=true
config property: rule-based-join-reorder=true

Resumen

Amazon EMR 6.8.0 y versiones posteriores permiten ejecutar consultas en Trino mucho más rápido que en Trino de código abierto. Según un artículo reciente, nuestro análisis de referencia TPC-DS demostró una mejora de 2,7 veces en el tiempo total de ejecución de consultas con Trino en Amazon EMR 6.15.0. Las optimizaciones discutidas en dicho artículo, entre otras, también están disponibles al ejecutar consultas de Trino en Athena, donde se observan mejoras de rendimiento similares. Para obtener detalles adicionales, consulte Cómo ejecutar consultas 3 veces más rápido con hasta un 70 % de ahorro en el último motor de Amazon Athena.

Como parte de nuestro continuo esfuerzo por innovar en beneficio de los clientes, Amazon EMR y Athena introducen regularmente mejoras de rendimiento y confiabilidad en sus últimas versiones. Consulte las páginas de lanzamiento de Amazon EMR y Amazon Athena para conocer las nuevas funciones y mejoras.


Acerca de los autores

Bhargavi Sagi es una ingeniera de desarrollo de software en Amazon Athena. Se unió a AWS en 2020 y ha estado trabajando en diversos aspectos de Amazon EMR y el motor Athena V3, incluyendo actualizaciones, confiabilidad y rendimiento del motor.

Sushil Kumar Shivashankar es el director de ingeniería de EMR Trino y del equipo de Athena Query Engine. Ha estado especializado en el campo del análisis de big data desde 2014.

 

¿Nos apoyarás hoy?

Creemos que todos merecen entender el mundo en el que viven. Este conocimiento ayuda a crear mejores ciudadanos, vecinos, amigos y custodios de nuestro planeta. Producir periodismo explicativo y profundamente investigado requiere recursos. Puedes apoyar esta misión haciendo una donación económica a Gelipsis hoy. ¿Te sumarás a nosotros?

Suscríbete para recibir nuestro boletín:

Recent Articles

Related Stories

DEJA UN COMENTARIO

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí