[Spark] Desviación de datos

1. Significado y daño

Al calcular los datos, el grado de dispersión de los datos no es suficiente, lo que resulta en una gran cantidad de datos concentrados en una o varias máquinas para el cálculo.

El cálculo local es mucho más lento que la velocidad de cálculo promedio y todo el proceso es demasiado lento.
Algunas tareas procesan demasiados datos, posiblemente OOM, falla de la tarea y falla de la aplicación.
1

2. Fenómeno y motivos

1. Fenómeno: (registro o seguimiento de chispas)

1. Ejecutor perdido, (Controlador) OOM y errores de proceso Shuffle;
2. Fallo repentino de las tareas normales en ejecución;
3. El tiempo de ejecución de un solo Ejecutor es extremadamente largo, y la tarea general está atascada en una etapa determinada y no fin;

Spark Streaming es más propenso a la desviación de datos, especialmente las operaciones de unión y grupo que incluyen SQL. Debido a que la asignación de memoria no es mucha, la desviación de datos es propensa a ocurrir, lo que causa OOM.

2. Razón

La desviación de datos solo se produce en la fase de reproducción aleatoria. Al realizar la reproducción aleatoria, cada una de las mismas claves debe llevarse a una tarea de un determinado nodo para su procesamiento. Por ejemplo, si la agregación o unión se realiza de acuerdo con la clave, la cantidad de datos correspondientes a una determinada clave es particularmente grande y se producirá un sesgo de datos.

Operadores de activación aleatoria: distintos, groupByKey, reduceByKey, aggregateByKey, join, cogroup, repartición, etc.

3. Posicionamiento

1 、 Interfaz de usuario web Spark

Verifique la cantidad de datos asignados por cada tarea para determinar si se debe a una asignación de datos desigual.

  1. La ejecución de una determinada tarea es particularmente lenta:
    1) Conozca los operadores que se usan comúnmente para activar la reproducción aleatoria;
    2) Encuentre qué etapa ejecutar desde el registro y luego verifique la cantidad de datos asignados por cada tarea en la interfaz de usuario web de Spark. Si es muy desigual, existe una alta probabilidad de sesgo de datos.
    3) Calcule el código del problema según el principio de división de etapas y luego ubique con precisión el operador de reproducción aleatoria. (Esta parte requiere una comprensión profunda del código fuente de Spark)

  2. Cierta tarea es inexplicable OOM
    directamente al mirar la pila de excepciones en el registro en el modo yarn-client / cluster,

2. Estadísticas por clave

Debido a que los datos son enormes, se pueden muestrear los datos, se puede contar la cantidad de ocurrencias y se pueden extraer las primeras de acuerdo con la cantidad de veces. Si la mayoría está distribuida de manera uniforme y los datos individuales son varios órdenes de magnitud mayores, entonces se ha producido un sesgo de datos.

Cuatro, resuelve

1. Evite la desviación de datos de la fuente de datos

  1. Filtre el
    contenido de datos anormales : maneje las anormalidades / valores nulos correctamente; ignore los datos no válidos que tengan poco efecto en los resultados según corresponda; datos válidos: personalice el particionador, modifique los datos desiguales una vez y hágalos más paralelos después de dividirlos. Recopilar nuevamente .


  2. Contenido de datos de preprocesamiento de ETL de Hive : la línea de advertencia utiliza ETL de Hive para agregar datos de acuerdo con la clave o unir otras tablas. Las operaciones de Spark ya no necesitan mezclar átomos para realizar dichas operaciones.
    Pros y contras : Se evita por completo la desviación de datos y se mejora considerablemente el rendimiento del trabajo de Spark. Pero tratar los síntomas no cura la causa raíz, solo hace avanzar el problema.
    Aplicación : Spark tiene altos requisitos de respuesta y pocos tiempos de ejecución. Se puede poner al frente para brindar una mejor experiencia de usuario.

2. Filtra algunas teclas que causan inclinación

Contenido : algunas claves con una cantidad especial de datos no son importantes para la ejecución del trabajo y los resultados de los cálculos, así que fíltrelas directamente.
Pros y contras : Simple de implementar y muy efectivo. Sin embargo, no hay muchos escenarios aplicables. En la mayoría de los casos, hay muchas teclas que causan inclinación, no pocas.

3. Mejorar el paralelismo de las operaciones de reproducción aleatoria

Contenido : establezca el número de tareas de lectura aleatoria ejecutadas por el operador aleatorio, el parámetro spark.shuffle.partitions puede representar paralelo, el valor predeterminado es 200, que se puede ajustar más grande. El número de tareas asignadas a varias claves ha cambiado de una a varias, lo que permite que cada tarea procese menos datos que antes.
Pros y contras : Simple de implementar y se puede aliviar de manera efectiva, pero no se resuelve por completo.
3

4. Agregación en dos etapas (agregación local + agregación global)

Contenido : para la primera agregación local, coloque un número aleatorio delante de cada clave, realice una agregación local como reduceByKey, luego elimine el prefijo de cada clave y vuelva a realizar la operación de agregación global para obtener el resultado final.
Pros y contras : aplicar reduceByKey / goup by, etc. Para operaciones de agregación (operaciones de agrupación), pero para operaciones de combinación aleatoria, se deben usar otras soluciones.
4

5. Convertir combinación de reducción en combinación de mapa

Contenido : para tablas grandes y pequeñas (<2G), se pueden usar operadores de combinación en lugar de operadores de combinación, pero las variables de transmisión y los operadores de mapa se pueden usar para implementar operaciones de combinación, evitando así las operaciones de mezcla. La variable Broadcast obtiene los datos completos del RDD más pequeño, lo compara con cada elemento del RDD actual según la clave y conecta el mismo. Ventajas y
desventajas : La operación de unión funciona bien, pero solo es adecuada para mesas grandes y pequeñas. Las tablas más pequeñas serán OOM.

6. Pruebe la tecla de inclinación y divida la operación de unión

Aplicable : cuando se unen dos tablas RDD / Hive, si la cantidad de datos es relativamente grande, se produce un sesgo de datos. Si el volumen de datos de una pequeña cantidad de claves en un RDD es demasiado grande, todas las claves en otro RDD se distribuyen uniformemente.
Contenido : para unas pocas claves con una gran cantidad de datos, muestree muestras de las claves con la mayor cantidad de datos y luego divida estas claves del RDD original para formar un solo RDD, y marque cada clave con aleatorio dentro de n El número es se utiliza como prefijo, y otro RDD que debe unirse también se filtra para formar un RDD separado correspondiente a la clave. Cada dato se expande en n datos y se agrega el prefijo 0-n. La mayoría de las claves que No provocará que la inclinación también forme otro RDD. En este punto, la misma clave original se divide en n partes, que se distribuyen a varias tareas para unirse. El resto del RDD se puede usar como de costumbre y, finalmente, los dos resultados de la combinación se fusionan para obtener el resultado final de la combinación.
Ventajas y desventajas : solo unas pocas teclas causan inclinación, simplemente divídalas, y luego otro RDD correspondiente a la clave se expande n veces. Pero si hay demasiadas teclas de inclinación, como miles, no es adecuado.

7. Use un prefijo aleatorio y expanda RDD

Contenido : similar al esquema 6, cuando se realiza la operación de unión, una gran cantidad de claves en el RDD causan datos. A_RDD se marca con un número adicional aleatorio y B_RDD se expande. La diferencia es que la sexta solución es para una pequeña cantidad de claves. Esta solución es para una gran cantidad de claves sesgadas. Es imposible dividir algunas claves. Solo puede expandir los datos de todo el RDD, lo que requiere una gran cantidad de recursos de memoria. . Ventajas y
desventajas : Los datos del tipo de combinación se pueden inclinar y el efecto es significativo, por supuesto, es más para aliviar que para evitar por completo. Sin embargo, la expansión requiere grandes recursos de memoria.

8. Uso combinado

Contenido : Primero, use los esquemas uno y dos para preprocesar parte de los datos. En segundo lugar, puede aumentar el paralelismo de la mezcla. Finalmente, puede elegir un esquema para optimizar para diferentes operaciones de agregación o unión.

9. Otros ángulos:

Perspectiva empresarial : por ejemplo, Shanghái tiene una gran cantidad de datos, que pueden contarse por separado y finalmente integrarse con otras ciudades;
nivel de programa : recuento (distinto) da como resultado solo una reducción, que se puede combinar con una capa de recuento fuera del grupo;
ajuste de parámetros : Spark viene con muchos parámetros, el uso razonable puede resolver la mayoría de los problemas.

Cinco, referencia

1. La forma de optimizar el rendimiento de Spark: N tipos de posturas para resolver la desviación de datos de Spark
2. Guía de optimización del rendimiento de Spark: capítulo avanzado
3. Hable sobre cientos de miles de millones de prácticas de optimización de datos: desviación de datos (productos secos puros)
4. Datos de Spark sesgo y sus soluciones
5. Desviación de datos detallada (recomendado para la recopilación)
6. Este artículo le mostrará qué es "sesgo de datos"
7. La entrevista debe preguntar y sesgo de datos

Supongo que te gusta

Origin blog.csdn.net/HeavenDan/article/details/115006042
Recomendado
Clasificación