Hola, soy Luis y hoy les traigo otro artículo.
Hoy, Spark SQL es uno de los componentes más valiosos de Apache Spark. Impulsa tanto las consultas SQL como la API de DataFrame.
En su esencia, el Optimizador de catalizador, que aprovecha las funciones avanzadas de Scala para crear un optimizador de consultas extensible y extremadamente potente.
En este artículo, intentaremos comprender el flujo de trabajo del Catalyst Optimizer y luego profundizaremos en las nuevas optimizaciones que habilita Ejecución de consultas adaptables.
La ejecución adaptativa de consultas (AQE) es una nueva función disponible en Apache Spark 3.0 que le permite optimizar y ajustar los planes de consulta según las estadísticas de tiempo de ejecución recopiladas mientras se ejecuta la consulta.
Para comprender cómo funciona, primero echemos un vistazo a las etapas de optimización que realiza Catalyst Optimizer.
Índice
Optimizador de catalizador 101
El optimizador de catalizador aplica optimizaciones durante las etapas de planificación lógica y física. Optimiza la consulta de manera lógica, luego genera una variedad de planes físicos y selecciona el más eficiente en función de un modelo de costos.
1. Plan lógico no resuelto: para una consulta SQL o un marco de datos, el optimizador acepta el plan lógico no resuelto y verifica los errores de sintaxis.
2. Plan lógico: el optimizador usa el catálogo para resolver los nombres que aún están sin resolver en el plan lógico no resuelto y luego lo convierte en un plan lógico.
3. Plan lógico optimizado: el plan lógico se mejora reorganizando el orden de consulta de la forma más eficiente.
4. Planes físicos: define cómo se ejecutará físicamente el plan lógico en todo el clúster. En esta etapa, produce muchos planos físicos.
5. Plan físico seleccionado: Los planes físicos se evalúan utilizando un modelo de costos y se selecciona el mejor.
6. RDD: finalmente, el optimizador convierte el plan físico en RDD y luego genera un código de bytes para la JVM.
En Spark 2.X
, todas las optimizaciones estaban basadas en reglas.
Todos se basan en estimaciones que se calculan antes del tiempo de ejecución, por lo que puede haber otras posibilidades de ajuste que aparezcan a medida que se ejecuta la consulta y también problemas que no se pueden predecir antes de la ejecución.
Ejecución de consultas adaptables
AQE mejora el flujo de trabajo de Catalyst Optimizer ajustando los planes de consulta según las estadísticas de tiempo de ejecución recopiladas durante la ejecución de la consulta.
Spark enviará estadísticas sobre el tamaño real de los datos en los archivos de reproducción aleatoria para que, en la siguiente etapa, vuelva a optimizar el plan lógico para cambiar dinámicamente las estrategias de combinación, fusionar el número de particiones de reproducción aleatoria u optimizar las combinaciones sesgadas.
Broadcast Hash Join (BHJ) es una de las estrategias de combinación de alto rendimiento que utiliza Spark, requiere transmitir la relación de combinación.
Para que se mantenga óptimo, existe un umbral de tamaño de transmisión (predeterminado 10 MB).
El problema con el optimizador Spark 2.X es que se basa en una estimación de datos basada en tamaños de archivos de entrada, esta estimación no siempre puede ser precisa ya que los filtros y operadores complejos pueden interferir para modificar el tamaño mientras tanto.
Cuando AQE está habilitado, reemplaza la estrategia de combinación en tiempo de ejecución según el tamaño de relación de combinación más preciso.
Si hizo alguna práctica sucia con Spark, sabe que tiene que ajustar las particiones de reproducción aleatoria en un momento u otro.
El problema principal con las particiones de reproducción aleatoria es que el mejor número para elegir es relevante para el tamaño de los datos. Encontrar un número no es una tarea fácil, por lo que la gente generalmente usa varias pruebas y luego elige la mejor.
Pero si se equivocan, puede provocar que se derramen datos en el disco o que se obtengan muchos datos de la red.
AQE combina pequeñas particiones adyacentes en particiones más grandes en tiempo de ejecución al observar las estadísticas del archivo de reproducción aleatoria, por lo que podemos establecer el número en uno grande al principio y AQE hará el resto.
El sesgo de datos es un problema de distribución de datos. Lo que significa que tiene datos sesgados si sus particiones varían mucho en tamaño en el clúster.
Puede degradar el rendimiento de las consultas, especialmente con las combinaciones. AQE detecta tal sesgo automáticamente a partir de estadísticas de archivos aleatorios.
Luego divide las particiones sesgadas en subparticiones más pequeñas, que se unirán a la partición correspondiente desde el otro lado, respectivamente.
Puede acelerar drásticamente sus consultas. Bajo el capó, mejora su plan de consulta a medida que se ejecuta su consulta, eliminando la necesidad de recopilar estadísticas o preocuparse por estimaciones inexactas y ajustes de configuración de chispa de núcleo duro.
Tenga en cuenta que está desactivado de forma predeterminada, pero puede activarlo configurando spark.sql.adaptive.enabled.a.true
.
Gracias por leer este artículo.
Añadir comentario