¿Cómo funciona el Broadcast Nested Loop Join en Spark? – Hadoop en el mundo real

Broadcast Nested Loop une los trabajos emitiendo uno de los conjuntos de datos completos y realizando un bucle anidado para unir los datos. Así que esencialmente cada registro del conjunto de datos 1 se intenta unir con cada registro del conjunto de datos 2.

Como puedes adivinar, el Broadcast Nested Loop no es preferido y podría ser bastante lento. Funciona tanto para las uniones equi como para las no equi y se elige por defecto cuando tienes una unión no equi.

Ejemplo

No cambiamos los valores por defecto para ambos
chispa.sql.unirse a.preferSortMergeJoin y
chispa.sql.autoBroadcastJoinThreshold .


Recomendado: ¿Qué es el Big data?.


Note que aquí estamos tratando de realizar una operación de unión no-equí.

Cuando vemos el plan que se ejecutará, podemos ver que se utiliza BroadcastNestedLoopJoin.

Las etapas involucradas en una emisión anidada se unen

La unión del Broadcast Nested Loop no implica una barajadura o un tipo. El conjunto de datos más pequeño de los dos será transmitido a todas las particiones y un bucle anidado se realiza entre los dos conjuntos de datos para realizar la unión. Cada registro del conjunto de datos 1 se intenta unir con cada registro del conjunto de datos 2.

Emitir el bucle anidado unirse a los escenarios de la chispa

El funcionamiento interno de la emisión anidada del bucle se une

Hay dos fases en una unión de bucle anidado de emisión.

Fase de emisión

  • El conjunto de datos más pequeño es transmitido a todos los ejecutores o tareas que procesan el conjunto de datos más grande
  • El lado izquierdo se emitirá en una unión exterior derecha.
  • El lado derecho en un exterior izquierdo, semi izquierdo, izquierdo anti o unión de existencia será transmitido.
  • Cada lado puede ser emitido en una unión interna.

Emisión de la chispa de bucle anidado etapa 1

Fase de unión de bucle anidado

  • Una vez que el conjunto de datos es transmitido, cada registro de un conjunto de datos se intenta unir con cada registro de otro conjunto de datos en un bucle anidado.
  • Como esta unión se utiliza para condiciones no equi, la iteración no puede detenerse tan pronto como se encuentra una unión como en Sort Merge Join. La iteración pasará por todo el conjunto de datos.
  • Tengan en cuenta que una especie no está involucrada en esta unión.

Emisión de la chispa de bucle anidado etapa 1 y 2

¿Cuándo funciona el Broadcast Nested Loop Join?

  • Funciona tanto para los equi como para los no equi se une
  • Funciona para todos los tipos de unión

cuando la unión del bucle anidado de la transmisión no funciona?

  • Esta unión es lenta
  • Esta unión no funcionará cuando los dos lados sean lo suficientemente grandes para la transmisión y se puedan ver las excepciones de Out Of Memory.

¿Interesado en aprender sobre Shuffle Hash únete a Spark? – Haz clic aquí.