En este documento se ofrecen directrices para solucionar problemas habituales que impiden que se inicien las cargas de trabajo por lotes de Spark y las sesiones interactivas deGoogle Cloud Serverless para Apache Spark.
Información general
Normalmente, cuando no se puede iniciar un lote o una sesión, se muestra el siguiente mensaje de error:
Driver compute node failed to initialize for batch in 600 seconds
Este mensaje de error indica que el controlador de Spark no se ha podido iniciar en el periodo de tiempo de espera predeterminado de 600 segundos (10 minutos). Las causas habituales están relacionadas con los permisos de la cuenta de servicio, la disponibilidad de recursos, la configuración de la red o las propiedades de Spark.
Causas de los errores de inicio de sesiones y de lotes, y pasos para solucionarlos
En las siguientes secciones se enumeran las causas habituales de los fallos de inicio de lotes y sesiones, así como consejos para solucionar los problemas.
Permisos de cuenta de servicio insuficientes
La cuenta de servicio que usa tu lote o sesión de Serverless para Apache Spark requiere roles de gestión de identidades y accesos específicos que incluyan permisos para la operación de Serverless para Apache Spark y acceso a recursos de Google Cloud . Si la cuenta de servicio no tiene los roles necesarios, es posible que no se pueda inicializar el controlador de Spark para el lote o la sesión.
- Rol de trabajador obligatorio: la cuenta de servicio del lote o de la sesión debe tener el rol de trabajador de Dataproc (
roles/dataproc.worker
). Este rol contiene los permisos mínimos necesarios para que Serverless para Apache Spark aprovisione y gestione recursos de computación. - Permisos de acceso a datos: si tu aplicación Spark lee o escribe datos en Cloud Storage o BigQuery, la cuenta de servicio necesita roles relacionados con esos servicios:
- Cloud Storage: se necesita el rol
Storage Object Viewer
(roles/storage.objectViewer
) para leer y el rolStorage Object Creator
(roles/storage.objectCreator
) oStorage Object Admin
(roles/storage.admin
) para escribir. - BigQuery: se necesita el rol
BigQuery Data Viewer
(roles/bigquery.dataViewer
) para leer y el rolBigQuery Data Editor
(roles/bigquery.dataEditor
) para escribir.
- Cloud Storage: se necesita el rol
- Permisos de registro: la cuenta de servicio necesita un rol con permiso para escribir registros en Cloud Logging. Normalmente, el rol
Logging Writer
(roles/logging.logWriter
) es suficiente.
Consejos para solucionar problemas:
- Identifique la cuenta de servicio del lote o la sesión. Si no se especifica, se usa la cuenta de servicio predeterminada de Compute Engine.
- Ve a la página Gestión de identidades y accesos > Gestión de identidades y accesos de la consola de Google Cloud , busca la cuenta de servicio del lote o de la sesión y comprueba que tenga los roles necesarios para las operaciones. Asigna los roles que falten.
Cuota insuficiente
Si se superan las cuotas específicas de un proyecto o una región para Google Cloud Serverless para Apache Spark u otros Google Cloud recursos, no se podrán iniciar nuevos lotes ni sesiones.
Consejos para solucionar problemas:
Consulta la página Google Cloud Cuotas de Serverless para Apache Spark para conocer los límites de los lotes simultáneos, las DCUs y el almacenamiento de Shuffle.
- También puedes usar el comando
gcloud compute quotas list
para ver el uso y los límites actuales de tu proyecto y región:gcloud compute quotas list --project=PROJECT_ID --filter="service:dataproc.googleapis.com"
- También puedes usar el comando
Si alcanzas los límites de cuota con frecuencia, puedes solicitar un aumento de cuota a través de la Google Cloud consola.
Problemas de configuración de red
Si la configuración de red es incorrecta (por ejemplo, la configuración de VPC, el acceso privado a Google o las reglas de cortafuegos), se puede impedir que el controlador de Spark se inicialice o se conecte a los servicios necesarios.
Consejos para solucionar problemas:
Verifica que la red de VPC y la subred especificadas para tu lote o sesión estén configuradas correctamente y tengan suficientes direcciones IP disponibles.
Si tu lote o sesión necesita acceder a las APIs y los servicios de Google sin atravesar la red pública de Internet, comprueba que el acceso privado a Google esté habilitado en la subred.
Revisa las reglas de cortafuegos de tu VPC para comprobar que no bloqueen por error la comunicación interna o la salida a las APIs de Google o a los servicios externos que necesita tu aplicación Spark.
Problemas con las propiedades de Spark o el código de la aplicación
Si las propiedades de Spark están mal configuradas, sobre todo las relacionadas con los recursos del controlador, o si hay problemas en el código de la aplicación Spark, se pueden producir errores de inicio.
Consejos para solucionar problemas:
Comprueba los valores de
spark.driver.memory
yspark.driver.cores
. Comprueba que estén dentro de los límites razonables y que se ajusten a las DCUs disponibles. Si los valores de estas propiedades son demasiado grandes, se pueden agotar los recursos y se pueden producir errores de inicialización. Elimina las propiedades de Spark innecesarias o experimentales para simplificar la depuración.Prueba a ejecutar una aplicación Spark "Hello World" para determinar si el problema se debe a la configuración de tu entorno o a la complejidad o los errores del código.
Verifica que todos los archivos JAR de la aplicación, los archivos Python o las dependencias especificados para tu lote o sesión estén ubicados correctamente en Cloud Storage y que la cuenta de servicio del lote o de la sesión pueda acceder a ellos.
Consultar registros
Un paso fundamental para diagnosticar los errores de creación de lotes es examinar los registros detallados en Cloud Logging.
- Ve a la página Cloud Logging en la Google Cloud consola.
- Filtrar por lotes o sesiones de Serverless para Apache Spark:
- En el menú desplegable Recurso, selecciona
Cloud Dataproc Batch
oCloud Dataproc Session
. - Filtra por
batch_id
osession_id
para ver el lote o la sesión que ha fallado. También puedes filtrar porproject_id
ylocation
(región).
- En el menú desplegable Recurso, selecciona
- Busca entradas de registro con
jsonPayload.component="driver"
. Estos registros suelen contener mensajes de error específicos o rastreos de pila que pueden indicar el motivo del fallo de inicialización del controlador antes de que se agote el tiempo de espera de 600 segundos.