Un artículo para comprender el corte de particiones dinámicas de Apache Spark 3.0 (artículo de título de Dynamic Partitio

Un artículo sobre la eliminación de particiones dinámicas de Apache Spark 3.0 (eliminación de particiones dinámicas)

Big Data de memoria pasada Big Data de memoria pasada

Poda de partición estática

Cualquiera que haya usado Spark sabe que Spark SQL admite el corte de particiones al realizar consultas. Por ejemplo, si tenemos la siguiente consulta:
SELECT FROM Sales_iteblog WHERE day_of_week = 'Mon'
Spark realizará automáticamente las siguientes optimizaciones:
Un artículo para comprender el corte de particiones dinámicas de Apache Spark 3.0 (artículo de título de Dynamic Partitio
Si desea obtener más información sobre Spark y Hadoop in time O artículos relacionados con Hbase, preste atención a la cuenta pública de WeChat: iteblog_hadoop
Como puede ver en la figura anterior, Spark automáticamente empuja el operador Filter a la fuente de datos al compilar SQL, es decir, la operación Filter es realizado antes de Scan, y day_of_week = Saque todos los datos de 'Mon', saque los otros datos que no son necesarios, de modo que los datos procesados ​​en Spark SQL sean menores y los datos de consulta de todo el SQL se vuelvan más rápidos. este es el tiempo de compilación Por lo tanto, esto se llama Poda de particiones estáticas.
La consulta SQL anterior ha sido empujada hacia abajo por el operador en Spark, y ha podido cumplir con la mejora del rendimiento de nuestra consulta. Pero la consulta de datos del mundo real no es tan simple, echemos un vistazo a la siguiente declaración de consulta:
SELECT
FROM Sales JOIN Date WHERE Date.day_of_week = 'Mon' El
motor de consulta más pobre hace esto:
Un artículo para comprender el corte de particiones dinámicas de Apache Spark 3.0 (artículo de título de Dynamic Partitio
si desea obtener más información sobre Spark, Para artículos relacionados con Hadoop o Hbase, siga la cuenta pública de WeChat: iteblog_hadoop
Como se puede ver en la figura anterior, el motor de consulta ignora directamente la condición de filtro Date.day_of_week = 'Mon'. Las dos tablas se unen y luego se filtran los resultados de la unión. Esto puede dar lugar a muchos cálculos no válidos. Si Date.day_of_week = 'Mon' puede filtrar una gran cantidad de datos inútiles, lo que definitivamente puede mejorar el rendimiento de la consulta. Esta situación se puede manejar bien en Spark SQL. Impulsará la condición de filtro Date.day_of_week = 'Mon' antes del escaneo de la tabla de fecha:
Un artículo para comprender el corte de particiones dinámicas de Apache Spark 3.0 (artículo de título de Dynamic Partitio
si desea obtener información sobre los artículos relacionados con Spark, Hadoop o Hbase, preste atención a WeChat public account: iteblog_hadoop Eliminación de
particiones dinámicas ( Eliminación de particiones dinámicas) ¿
El push-down del operador realizado por Spark SQL anterior ya no puede mejorar el rendimiento de las consultas? ¿Existe una mejor manera de filtrar aún más algunos datos inútiles? Esta es la adaptación dinámica de particiones que presentará este artículo. La función de recorte dinámico de particiones se introdujo en Spark 3.0; consulte SPARK-11150 y SPARK-28888 para obtener más detalles.
¿Qué es el recorte dinámico de particiones? El llamado corte de partición dinámico se basa en la información inferida en tiempo de ejecución (tiempo de ejecución) para un posterior corte de partición. Por ejemplo, tenemos la siguiente consulta:


SELECT * FROM dim_iteblog 
JOIN fact_iteblog 
ON (dim_iteblog.partcol = fact_iteblog.partcol) 
WHERE dim_iteblog.othercol > 10

El plan de ejecución de la consulta dinámica es el siguiente:
Un artículo para comprender el corte de particiones dinámicas de Apache Spark 3.0 (artículo de título de Dynamic Partitio
si desea obtener información sobre Spark, Hadoop o artículos relacionados con Hbase a tiempo, preste atención a la cuenta pública de WeChat: iteblog_hadoop
Como puede ver en lo anterior, con la adaptación dinámica de particiones , Spark puede verificar primero el partcol de la tabla fact_iteblog cuando se está ejecutando. Después de filtrar una vez y luego unirse a la tabla dim_iteblog, es posible que este rendimiento generalmente mejore, especialmente cuando la tabla fact_iteblog tiene una gran cantidad de datos inútiles La mejora del rendimiento será muy grande.
Databricks realizó una prueba TPC-DS en 10 clústeres configurados como i3.xlarge y concluyó que el rendimiento de las consultas de 60 consultas en 102 consultas se mejoró de 2 a 18 veces en comparación con Spark 2.4.

Un artículo para comprender el corte de particiones dinámicas de Apache Spark 3.0 (artículo de título de Dynamic Partitio
En la consulta de la Consulta 98, ¡el rendimiento se ha mejorado 100 veces!
Un artículo para comprender el corte de particiones dinámicas de Apache Spark 3.0 (artículo de título de Dynamic Partitio

Supongo que te gusta

Origin blog.51cto.com/15127589/2678029
Recomendado
Clasificación