Resumen de problemas de desarrollo de chispas

Registre y analice los problemas encontrados en el desarrollo de chispas


1 ver registros

fuente de registro método de obtención características
sistema de programación Ver directamente el registro de programación Localice rápidamente problemas simples, el registro es el más conciso y no se puede analizar en profundidad
Interfaz de usuario de Spark Ver por ID de aplicación en la interfaz de usuario de Spark Visualización gráfica, fácil de analizar problemas y proceso de ejecución, registros más completos
registro de hilo registros de hilo -applicationId app_ld > res.log Texto de registro, pero el registro es el análisis más detallado y profundo de los problemas

registro perdido

1. Registros perdidos

1) El nodo donde se encuentra el controlador se pierde, se encoge o se recicla puntualmente.


2 Recursos insuficientes

Tanto el controlador como el ejecutor pueden tener memoria insuficiente;

1. Código de error -134

La función agregada provoca un desbordamiento de memoria

1. Descripción del error

El contenedor salió con un código de salida distinto de cero 134. Archivo de error: prelaunch.err.
Últimos 4096 bytes de prelaunch.err


2. Funciones

recopilar_conjunto, recopilar_lista


3. Motivo

Cierto valor clave (nulo, desconocido, cadena vacía) es demasiado, y el valor del valor agregado es demasiado, lo que hace que el rango (matriz fuera de rango) exceda el límite;

4. Soluciones

1) aumentar la memoria

2) Descubra el valor clave que excede el límite y fíltrelo;

2. Código de error -104

La unión de difusión provoca un desbordamiento de memoria

diagnósticos: la aplicación application_id falló 2 veces debido a que AM Container for appattempt_id salió con exitCode: -104
El contenedor se está ejecutando más allá de los límites de memoria física. Uso actual: 2,4 GB de 2,4 GB de memoria física utilizada; Se utilizan 4,4 GB de 11,9 GB de memoria virtual. Contenedor de matanza.
 

3. Código de error -137

Contenedor sin memoria

1. Descripción del error

Trabajo cancelado debido a una falla de etapa: la tarea 2 en la etapa 26.0 falló 4 veces, la falla más reciente: se perdió la tarea 2.3 en la etapa 26.0 (TID 3253, ip-10-20-68-111.eu-west-1.compute.internal, ejecutor 43): ExecutorLostFailure (el ejecutor 43 salió debido a una de las tareas en ejecución) Motivo: Contenedor de un nodo incorrecto: container_e03_1634810603944_186010_01_000121 en el host: ip-10-20-68-111.eu-west-1.compute.internal. Estado de salida: 137. Diagnóstico: [2022-05-27 01:49:51.535] Contenedor eliminado a pedido. El código de salida es 137

2. Soluciones

Resolver "Contenedor eliminado a pedido. El código de salida es 137" en Spark en Amazon EMR

El contenedor de la tarea Spark eliminó el error del código de salida 137 en AWS EMR

4. Código de error - OutOfMemoryError

1 desbordamiento de memoria del controlador

1) Mensaje de error

java.lang.OutOfMemoryError: GC overhead limit exceeded
-XX:OnOutOfMemoryError="kill -9 %p"
Executing /bin/sh -c "kill -9 29082"...
java.lang.OutOfMemoryError: Java heap space
-XX:OnOutOfMemoryError="kill -9 %p
Executing /bin/sh -c "kill -9 23463

2) Posibles razones

causas del problema solución
transmitir la mesa más grande

a.Aumentar la memoria;

b. Cancelar la mesa para retransmitir

Demasiadas particiones de origen de datos

a. Aumentar la memoria

b. Reducir la partición aguas arriba

Hay demasiados datos recopilados para el controlador.

a. Aumentar la memoria

b. Reducir el conjunto de resultados

El servidor donde se encuentra el controlador no tiene recursos suficientes

A. Reducir adecuadamente el controlador pero la memoria

b. Cambiar a un servidor con suficientes recursos

-

3. Invalidación de caché

问题描述:spark3当cache表 where 后有 in 过滤时 不会走cache ,而再去读源数据
-- 不走cache写法:
cache table test_tamp1 as(
    select
        id
    from
        table_name_01
    where
        dt = '20230326'
        and pkg in (select pkg from table_name_02)
    group by
        id
);



解决方法
-- join替代in操作
cache table test_tamp1 as(
    select
        id
    from
        table_name_01 aa
    left semi join
        table_name_02 bb
        on aa.pkg = bb.pkg
    where
        dt = '20230326'
    group by
        id
);

-- 设置参数
set spark.sql.legacy.storeAnalyzedPlanForView=true;

4 datos sesgados

Posibles Causas:

1) Aparece una tecla de acceso rápido (valor nulo, valor anormal) durante la asociación;

2) coalesce reduce la partición, lo que resulta en datos sesgados;

1 Ver el registro de operaciones

2 Encuentra claves primarias sesgadas 

1 Distribución de clave principal de la tabla de origen
Analice la tabla de origen directamente, los datos no explotarán y la consulta es rápida

2. La distribución de la clave principal de las estadísticas de asociación
ha sido sesgada y la velocidad de consulta es lenta

3 medidas de optimización

1 Filtrar claves primarias no válidas y anormales

1) id = 'clave primaria anormal'
2) id es nulo
3) id = ''

5. Error en fase de escritura

1) Aumentar el paralelismo

2) aumentar la memoria

3) Derrame a disco

6. Error de desbordamiento de pila

java.lang.StackOverflowError

`java.lang.StackOverflowError` generalmente es causado por llamadas recursivas demasiado profundas. En Spark, esto puede suceder especialmente cuando realiza uniones complejas o anida varias operaciones de procesamiento de datos.

Escenarios que causan este problema:

unir demasiadas tablas

Para evitar esta situación, puede probar las siguientes soluciones

1. Aumente el tamaño de la pila de la JVM: establecer el parámetro `-Xss` al iniciar la aplicación puede aumentar el tamaño de la pila de la JVM. Por ejemplo, `spark-submit --conf spark.driver.extraJavaOptions=-Xss4m yourApp.jar`, establece el tamaño de la pila en 4 MB. Sin embargo, este enfoque puede hacer que la JVM use más memoria, por lo que debe usarse con precaución.

2. Use el método `repartición`: El método `repartición` puede volver a particionar los datos, reduciendo así la carga al unir. Por ejemplo, si tiene 100 particiones en su conjunto de datos, puede usar `df.repartition(10)` para dividirlo en 10 particiones para reducir la carga.

3. Use la variable `broadcast`: La variable `broadcast` puede transmitir la variable a todos los nodos de trabajo. Este enfoque generalmente es adecuado para conjuntos de datos pequeños y puede reducir la carga en cada nodo trabajador. Por ejemplo, si necesita unir un conjunto de datos muy grande con un conjunto de datos muy pequeño, puede transmitir el conjunto de datos pequeño a todos los nodos trabajadores para reducir la carga.


10 Otro Resumen

descripción china código de error Solución
no puedo leer el medidor

Error en la consulta: java.lang.IllegalArgumentException: no se puede crear una ruta a partir de una cadena vacía;

1 recrear vista en colmena
no se puede leer el archivo directamente Catalyst.analysis.UnresolvedException: Llamada no válida a tipo de datos en objeto no resuelto, árbol 1 Se leyó una columna que no existe
Eliminar otros datos de partición Problema de sobrescritura de partición dinámica Problema de sobreescritura de la partición dinámica de Apache Spark: memoria anterior
no se puede leer y escribir la misma tabla

Error en la consulta: no se puede sobrescribir una ruta que también se está leyendo.

-- No use metadatos de colmena

establecer chispa.sql.hive.convertMetastoreParquet=falso;

establecer chispa.sql.hive.convertMetastoreOrc=false;

El parámetro de configuración no tiene efecto.

1. Confirme en el entorno de chispa

2. ¿Se sobrescribe nuevamente (causado por componentes intermedios, como kyuubi tiene sus propios parámetros predeterminados)?

-

20 problemas abiertos

número de serie Descripción del problema
1 select * from table_name where dt = '20220423' Después de filtrar los datos y escribirlos en la tabla, cómo controlar el paralelismo de escritura y aumentar el paralelismo de procesamiento
2 Cómo manejar excepciones en spark-sql
3 Cómo cargar en serie cada tabla cuando se asocian varias tablas


Supongo que te gusta

Origin blog.csdn.net/weixin_40829577/article/details/120428653
Recomendado
Clasificación