¿Por qué falla mi trabajo de Spark en Amazon EMR?
Quiero solucionar un problema en mi trabajo de Apache Spark que falla en Amazon EMR.
Resolución
Fallos de aplicación
Excepción de versión ejecutable "Spark shuffle block fetch"
Cuando el nodo de trabajo ejecutor de Amazon EMR se encuentra en mal estado, es posible que recibas el siguiente error:
"ERROR ShuffleBlockFetcherIterator: Failed to get block(s) from ip-192-168-14-250.us-east-2.compute.internal:7337
org.apache.spark.network .client.ChunkFetchFailureException: Failure while fetching StreamChunkId[streamId=842490577174,chunkIndex=0]: java.lang.RuntimeException: Executor is not registered (appId=application_1622819239076_0367, execId=661)"
Cuando la utilización del disco de un nodo de trabajo supera el umbral de utilización del 90 %, el servicio de estado NodeManager de YARN identifica el nodo como MAL ESTADO. Amazon EMR incluye los nodos en mal estado en las listas de denegación y los contenedores de YARN no se asignan a los nodos en mal estado.
Para solucionar este problema, toma estas medidas:
- Revisa los registros del administrador de recursos del nodo maestro del clúster de Amazon EMR para ver si hay nodos de trabajo en mal estado. Para obtener más información, consulta la sección Uso elevado del disco debido a un nodo en mal estado de ¿Cómo resuelvo un error "ExecutorLostFailure: Slave lost" en Spark en Amazon EMR?
- Comprueba la utilización del espacio en disco de los nodos afectados, revisa los archivos que consumen espacio en disco y lleva a cabo la recuperación de datos para que los nodos vuelvan a estar en buen estado. Para obtener más información, consulta ¿Por qué el nodo central de mi clúster de Amazon EMR se está quedando sin espacio en disco?
Excepción de versión ejecutable "NoSuchElementException"
Si hay un problema en el código de la aplicación y en la inicialización de SparkContext, es posible que recibas la siguiente excepción:
"ERROR [Executor task launch worker for task 631836] o.a.s.e.Executor:Exception in task 24.0 in stage 13028.0 (TID 631836) java.util.NoSuchElementException: None.get"
Para resolver este problema, asegúrate de que no haya varios trabajos de SparkContext activos en la misma sesión. Puedes tener un SparkContext activo cada vez. Si deseas inicializar otro SparkContext, debes detener el trabajo activo antes de crear uno nuevo.
Para obtener más información, consulta SparkContext en el sitio web de Spark.
Error "Container exit code 137"
Cuando la tarea supera la memoria física asignada, un contenedor de YARN detiene la tarea y recibes el siguiente error:
"Container killed on request. Exit code is 137"
Recibes este error cuando tienes particiones aleatorias, tamaños de partición incoherentes o una gran cantidad de núcleos ejecutores.
Revisa los detalles del error en los registros del controlador de Spark para determinar la causa del error. Para obtener más información, consulta ¿Cómo accedo a los registros del controlador de Spark en un clúster de Amazon EMR?
Ejemplo de error del registro del controlador:
ERROR YarnScheduler: Lost executor 19 on ip-10-109-##-###.aws.com : Container from a bad node: container_1658329343444_0018_01_000020 on host: ip-10-109-##-###.aws.com . Exit status: 137.Diagnostics:Container killed on request. Exit code is 137 Container exited with a non-zero exit code 137. Killed by external signal Executor container 'container_1658329343444_0018_01_000020' was killed with exit code 137. To understand the root cause, you can analyze executor container log. # java.lang.OutOfMemoryError: Java heap space # -XX:OnOutOfMemoryError="kill -9 %p" # Executing /bin/sh -c "kill -9 23573"...
El seguimiento de la pila de errores anterior muestra que no hay suficiente memoria disponible en el ejecutor para seguir procesando los datos. Este error se puede producir en diferentes etapas del trabajo, tanto en transformaciones angostas como amplias.
Para solucionar este problema, toma las siguientes medidas:
- Aumenta la memoria del ejecutor.
Nota: La memoria del ejecutor incluye la memoria necesaria para ejecutar las tareas y la memoria adicional. La suma de estos valores no debe ser mayor que el tamaño de la máquina virtual de Java (JVM) y el tamaño máximo del contenedor de YARN. - Agrega más particiones de Spark.
- Aumenta el número de particiones aleatorias.
- Reduce la cantidad de núcleos ejecutores.
Para obtener más información, consulta ¿Cómo puedo solucionar el error "Container killed on request. Exit code is 137" de un trabajo de Spark en Amazon EMR?
Los trabajos de Spark están bloqueados y no se completan
Los trabajos de Spark pueden estar bloqueados por varias razones. Por ejemplo, los cambios en el proceso del controlador de Spark o la pérdida de contenedores ejecutores pueden detener los trabajos.
Los trabajos de Spark pueden bloquearse cuando utilizas mucho espacio en disco o cuando utilizas instancias de spot para nodos de clústeres y AWS termina la instancia de spot. Para obtener más información, consulta ¿Cómo resuelvo un error "ExecutorLostFailure: Slave lost" en Spark en Amazon EMR?
Para solucionar este problema, toma estas medidas:
- Revisa el controlador o los registros de los controladores de Spark para ver si hay excepciones.
- Consulta la lista de nodos de YARN para ver si hay nodos en mal estado. Cuando la utilización del disco supera la utilización que supera el umbral en un nodo central, el servicio de estado del administrador de nodos de YARN marca el nodo como en MAL ESTADO. Amazon EMR agrega los nodos en mal estado a las listas de denegación e impide que YARN asigne contenedores a esos nodos.
- Supervisa la utilización del espacio en disco y configura los volúmenes de Amazon Elastic Block Store (Amazon EBS) para mantener la utilización por debajo del 90 % para los nodos de trabajo del clúster de Amazon EMR.
Error “Heartbeat communication”
Los ejecutores de Spark envían señales de latido al controlador de Spark en los intervalos que especifica la propiedad spark.executor.heartbeatInterval. Cuando se producen pausas prolongadas en la recopilación de elementos no utilizados, es posible que los ejecutores no envíen señales de latidos. El controlador detiene los ejecutores que no pueden enviar una señal de latido por un valor superior al especificado y aparece el siguiente error:
"WARN Executor: Issue communicating with driver in heartbeater org.apache.spark.rpc.RpcTimeoutException: Futures timed out after [10000 milliseconds]. This timeout is controlled by spark.executor.heartbeatInterval"
Las restricciones de memoria o los problemas de falta de memoria (OOM) provocan excepciones de tiempo de espera cuando el ejecutor procesa los datos. Estos problemas también influyen en el proceso de recopilación de elementos no utilizados y pueden generar más demoras.
Para resolver los errores de comunicación de los latidos, utiliza una de las siguientes opciones:
- Aumenta la memoria del ejecutor. Además, según el proceso de solicitud, reparticiona tus datos.
- Ajusta la recopilación de elementos no utilizados. Para obtener más información, consulta Garbage collection tuning (Ajuste de la recopilación de elementos no utilizados) en el sitio web de Apache Spark.
- Aumenta el intervalo de spark.executor.heartbeatInterval.
- Especifica un spark.network.timeout period más largo.
Error "ExecutorLostFailure"
Cuando el uso elevado del disco provoca la finalización de un nodo central o de tarea, es posible que recibas el siguiente error:
"ExecutorLostFailure "Exit status: -100. Diagnostics: Container released on a *lost* node"
También puedes recibir el error anterior cuando un nodo deja de responder debido a un uso elevado y prolongado de la CPU o a la poca memoria disponible. Para ver los pasos de solución de problemas, consulta ¿Cómo puedo solucionar el error «Exit status: -100. Diagnostics: Container released on a lost node" en Amazon EMR?
Nota: Este error también puede producirse cuando utilizas instancias de spot para los nodos del clúster y AWS termina una instancia de spot. El clúster de Amazon EMR aprovisiona una instancia bajo demanda para reemplazar la instancia de spot terminada y la aplicación podría recuperarse por sí sola. Para obtener más información, consulta Spark enhancements for elasticity and resiliency on Amazon EMR (Mejoras de elasticidad y resiliencia de Spark en Amazon EMR).
Error "SQL connection timeout"
Cuando un intento de conexión a la base de datos falla debido a que se ha agotado el tiempo de espera de la red, recibes el siguiente error. Para resolver este problema, comprueba que el host de la base de datos pueda recibir conexiones entrantes en el puerto 1433 de tus grupos de seguridad de clústeres de Amazon EMR.
Revisa también el número máximo de conexiones de bases de datos paralelas configuradas para la base de datos SQL y la asignación de memoria para la clase de instancia de base de datos. Las conexiones a bases de datos también consumen memoria. Si la utilización es alta, revisa la configuración de la base de datos y el número de conexiones permitidas. Para obtener más información, consulta Número máximo de conexiones de base de datos.
Excepciones de Amazon S3
HTTP 503 "Slow Down"
Las excepciones de HTTP 503 se producen cuando se supera la tasa de solicitudes de Amazon Simple Storage Service (Amazon S3) para el prefijo. Una excepción 503 no siempre significa que pueda producirse un error. Sin embargo, si resuelves la excepción, podrías mejorar el rendimiento de la aplicación.
Para obtener más información, consulta ¿Por qué mi trabajo de Spark o Hive en Amazon EMR devuelve la excepción de AmazonS3Exception HTTP 503 "Slow Down"?
HTTP 403 "Access Denied"
Los errores HTTP 403 se deben a credenciales incorrectas o no válidas, incluidas las siguientes:
- Credenciales o roles que no especificaste en el código de la aplicación.
- La política adjunta al rol del perfil de instancia de Amazon Elastic Compute Cloud (Amazon EC2).
- Puntos de enlace de Amazon Virtual Private Cloud (Amazon VPC) para Amazon S3.
- Políticas de buckets de origen y destino de Amazon S3.
Para resolver los errores 403, asegúrate de que el rol o política de AWS Identity and Access Management (IAM) correspondiente permita el acceso a Amazon S3. Para obtener más información, consulta ¿Por qué falla la solicitud de Amazon EMR y se produce la excepción de AmazonS3Exception HTTP 403 "Access Denied"?
HTTP 404 "Not Found"
Cuando la aplicación espera encontrar un objeto en Amazon S3, pero en el momento de la solicitud no se encontró el objeto, recibirás el error "HTTP 404 Not found".
El error puede deberse a los siguientes motivos:
- Rutas de Amazon S3 incorrectas.
- Un proceso ajeno a la aplicación movió o eliminó el archivo.
- Una operación provocó posibles problemas de coherencia, como una sobrescritura.
Para obtener más información, consulta ¿Por qué mi aplicación de Amazon EMR falla con la excepción de AmazonS3Exception HTTP 404 "Not Found"?
- Temas
- Analytics
- Etiquetas
- Amazon EMR
- Idioma
- Español

Contenido relevante
- preguntada hace 10 meses
- preguntada hace 7 meses
- preguntada hace un año
- Respuesta aceptadapreguntada hace un año
- preguntada hace un año
OFICIAL DE AWSActualizada hace 2 años