Solucionar problemas de creación de lotes y sesiones

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 rol Storage Object Creator (roles/storage.objectCreator) o Storage Object Admin (roles/storage.admin) para escribir.
    • BigQuery: se necesita el rol BigQuery Data Viewer (roles/bigquery.dataViewer) para leer y el rol BigQuery Data Editor (roles/bigquery.dataEditor) para escribir.
  • 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:

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"
      
  • 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 y spark.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.

  1. Ve a la página Cloud Logging en la Google Cloud consola.
  2. Filtrar por lotes o sesiones de Serverless para Apache Spark:
    1. En el menú desplegable Recurso, selecciona Cloud Dataproc Batch o Cloud Dataproc Session.
    2. Filtra por batch_id o session_id para ver el lote o la sesión que ha fallado. También puedes filtrar por project_id y location (región).
  3. 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.