Las cargas de trabajo por lotes y las sesiones interactivas de Managed Service para Apache Spark se ejecutan con credenciales de usuario final o de cuenta de servicio. Cuando se usan credenciales de cuenta de servicio, la cuenta de servicio que se usa para ejecutar cargas de trabajo por lotes o sesiones interactivas depende de la versión del entorno de ejecución del lote o la sesión.
Cuentas de servicio del entorno de ejecución anteriores a la versión 3.0
Las versiones del entorno de ejecución de Spark anteriores a 3.0 con credenciales de cuenta de servicio usan la
cuenta de servicio predeterminada de Compute Engine o una cuenta de servicio personalizada especificada por el usuario
para enviar una carga de trabajo por lotes o crear una sesión interactiva.
Cuentas de servicio del entorno de ejecución 3.0 y versiones posteriores
Las versiones del entorno de ejecución de Spark 3.0 y posteriores con credenciales de cuenta de servicio usan una cuenta de servicio personalizada especificada por el usuario para enviar una carga de trabajo por lotes o crear una sesión interactiva.
Los entornos de ejecución de Managed Service para Apache Spark 3.0 y versiones posteriores crean la
cuenta de servicio del agente de servicio del nodo de Dataproc Resource Manager, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, con el
rol de agente de servicio del nodo de Dataproc Resource Manager
en un proyecto de usuario de Managed Service para Apache Spark Google Cloud . Esta cuenta de servicio realiza las siguientes operaciones del sistema en los recursos de Managed Service para Apache Spark ubicados en el proyecto en el que se crea una carga de trabajo:
- Cloud Logging y Cloud Monitoring
- Operaciones básicas del nodo de Resource Manager de Managed Service para Apache Spark, como
get,heartbeatymintOAuthToken
Visualiza y administra los roles de la cuenta de servicio de IAM
Para ver y administrar los roles otorgados a la cuenta de servicio de la carga de trabajo por lotes o la sesión, haz lo siguiente:
En la Google Cloud consola de, dirígete a la página IAM.
Haz clic en Incluir asignaciones de roles proporcionadas por Google.
Visualiza los roles que aparecen en la cuenta de servicio predeterminada o personalizada de la carga de trabajo por lotes o la sesión.
En la siguiente imagen, se muestra el rol Trabajador de Managed Service para Apache Spark requerido que aparece en la cuenta de servicio predeterminada de Compute Engine,
project_number-compute@developer.gserviceaccount.com, que Managed Service para Apache Spark usa de forma predeterminada como la cuenta de servicio de la carga de trabajo o la sesión.
El rol de trabajador de Managed Service para Apache Spark asignado a la cuenta de servicio predeterminada de Compute Engine en la sección IAM de la Google Cloud consola. Puedes hacer clic en el ícono de lápiz que se muestra en la fila de la cuenta de servicio para otorgar o quitar roles de cuenta de servicio.
Cómo usar una cuenta de servicio entre proyectos
Puedes enviar una carga de trabajo por lotes que use una cuenta de servicio de un proyecto diferente al proyecto de la carga de trabajo por lotes (el proyecto en el que se envía el lote). En esta sección, el proyecto en el que se encuentra la cuenta de servicio se denomina service account project, y el proyecto en el que se envía el lote se denomina batch project.
¿Por qué usar una cuenta de servicio entre proyectos para ejecutar una carga de trabajo por lotes? Una posible razón es si a la cuenta de servicio del otro proyecto se le asignaron roles de IAM que proporcionan acceso detallado a los recursos de ese proyecto.
Pasos de la configuración
Los ejemplos de esta sección se aplican al envío de una carga de trabajo por lotes que se ejecuta con una versión del entorno de ejecución anterior a 3.0.
En el proyecto de la cuenta de servicio, haz lo siguiente:
Habilita cuentas de servicio para conectarlas entre proyectos.
Habilita la API de Dataproc
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén información para otorgar roles.Otorga a tu cuenta de correo electrónico (el usuario que crea el clúster) el rol de usuario de cuenta de servicio en el proyecto de la cuenta de servicio o, para un control más detallado, la cuenta de servicio en el proyecto de la cuenta de servicio.
Para obtener más información, consulta Administra el acceso a proyectos, carpetas y organizaciones para otorgar roles a nivel del proyecto y Administra el acceso a cuentas de servicio para otorgar roles a nivel de la cuenta de servicio.
Ejemplos de la CLI de gcloud:
El siguiente comando de muestra otorga al usuario el rol de usuario de cuenta de servicio a nivel del proyecto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Notas:
USER_EMAIL: Proporciona la dirección de correo electrónico de tu cuenta de usuario, en el formato:user:user-name@example.com.
El siguiente comando de muestra otorga al usuario el rol de usuario de cuenta de servicio a nivel de la cuenta de servicio:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Notas:
USER_EMAIL: Proporciona la dirección de correo electrónico de tu cuenta de usuario, en el formato:user:user-name@example.com.
Otorga a la cuenta de servicio el rol de trabajador de Managed Service para Apache Spark en el proyecto por lotes.
Ejemplo de la CLI de gcloud:
gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --role="roles/dataproc.worker"
En el proyecto por lotes, haz lo siguiente:
Otorga a la cuenta de servicio del agente de servicio de Managed Service para Apache Spark los roles de usuario de cuenta de servicio y creador de tokens de cuenta de servicio en el proyecto de la cuenta de servicio o, para un control más detallado, la cuenta de servicio en el proyecto de la cuenta de servicio. De esta manera, permites que la cuenta de servicio del agente de servicio de Managed Service para Apache Spark en el proyecto por lotes cree tokens para la cuenta de servicio en el proyecto de la cuenta de servicio.
Para obtener más información, consulta Administra el acceso a proyectos, carpetas y organizaciones para otorgar roles a nivel del proyecto y Administra el acceso a cuentas de servicio para otorgar roles a nivel de la cuenta de servicio.
Ejemplos de la CLI de gcloud:
Los siguientes comandos otorgan a la cuenta de servicio del agente de servicio de Managed Service para Apache Spark en el proyecto por lotes los roles de usuario de cuenta de servicio y creador de tokens de cuenta de servicio a nivel del proyecto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountUser"
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Los siguientes comandos de muestra otorgan a la cuenta de servicio del agente de servicio de Managed Service para Apache Spark en el proyecto por lotes los roles de usuario de cuenta de servicio y creador de tokens de cuenta de servicio a nivel de la cuenta de servicio:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountUser"
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto por lotes el rol de creador de tokens de cuenta de servicio en el proyecto de la cuenta de servicio o, para un control más detallado, la cuenta de servicio en el proyecto de la cuenta de servicio. De esta manera, le otorgas a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto por lotes la capacidad de crear tokens para la cuenta de servicio en el proyecto de la cuenta de servicio.
Para obtener más información, consulta Administra el acceso a proyectos, carpetas y organizaciones para otorgar roles a nivel del proyecto y Administra el acceso a cuentas de servicio para otorgar roles a nivel de la cuenta de servicio.
Ejemplos de la CLI de gcloud:
El siguiente comando de muestra otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto por lotes el rol de creador de tokens de cuenta de servicio a nivel del proyecto:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
El siguiente comando de muestra otorga a la cuenta de servicio del agente de servicio de Compute Engine en el proyecto del clúster el rol de creador de tokens de cuenta de servicio a nivel de la cuenta de servicio:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role="roles/iam.serviceAccountTokenCreator"
Envía la carga de trabajo por lotes
Después de completar los pasos de configuración, puedes enviar una carga de trabajo por lotes. Asegúrate de especificar la cuenta de servicio en el proyecto de la cuenta de servicio como la cuenta de servicio que se usará para la carga de trabajo por lotes.
Soluciona problemas de fallas basadas en permisos
Los permisos incorrectos o insuficientes para la cuenta de servicio que usa tu carga de trabajo por lotes o sesión pueden provocar fallas en la creación de lotes o sesiones que informan un mensaje de error "No se pudo inicializar el nodo de procesamiento del controlador para el lote en 600 segundos". Este error indica que el controlador de Spark no pudo iniciarse dentro del período de tiempo de espera asignado, a menudo debido a la falta de acceso necesario a los Google Cloud recursos.
Para solucionar este problema, verifica que tu cuenta de servicio tenga los siguientes roles o permisos mínimos:
- Rol de trabajador de Managed Service para Apache Spark (
roles/dataproc.worker): Este rol otorga los permisos necesarios para que Managed Service para Apache Spark administre y ejecute cargas de trabajo y sesiones de Spark. - Visualizador de objetos de almacenamiento (
roles/storage.objectViewer), Creador de objetos de almacenamiento (roles/storage.objectCreator) o Administrador de objetos de almacenamiento (roles/storage.admin): Si tu aplicación de Spark lee o escribe en buckets de Cloud Storage, la cuenta de servicio necesita los permisos adecuados para acceder a los buckets. Por ejemplo, si tus datos de entrada están en un bucket de Cloud Storage, se requiereStorage Object Viewer. Si tu aplicación escribe resultados en un bucket de Cloud Storage, se necesitaStorage Object CreatoroStorage Object Admin. - Editor de datos de BigQuery (
roles/bigquery.dataEditor) o Visualizador de datos de BigQuery (roles/bigquery.dataViewer): Si tu aplicación de Spark interactúa con BigQuery, verifica que la cuenta de servicio tenga los roles de BigQuery adecuados. - Permisos de Cloud Logging: La cuenta de servicio necesita permisos para escribir registros en Cloud Logging para una depuración eficaz. Por lo general, el rol de
Logging Writer(roles/logging.logWriter) es suficiente.
Fallas comunes relacionadas con permisos o acceso
Falta el rol
dataproc.worker: Sin este rol principal, la infraestructura de Managed Service para Apache Spark no puede aprovisionar y administrar correctamente el nodo controlador.Permisos insuficientes de Cloud Storage: Si tu aplicación de Spark intenta leer datos de entrada o escribir resultados en un bucket de Cloud Storage sin los permisos necesarios de la cuenta de servicio, el controlador puede fallar en la inicialización porque no tiene acceso a recursos críticos.
Problemas de red o firewall: Los Controles del servicio de VPC o las reglas de firewall pueden bloquear de forma involuntaria el acceso de la cuenta de servicio a Google Cloud las APIs o los recursos.
Para verificar y actualizar los permisos de la cuenta de servicio, haz lo siguiente:
- Ve a la página IAM y administración > IAM en la Google Cloud consola de.
- Ubica la cuenta de servicio que se usa para tus cargas de trabajo por lotes o sesiones.
- Verifica que se asignen los roles necesarios. Si no es así, agrégalos.
Para obtener una lista de los roles y permisos de Managed Service para Apache Spark, consulta Permisos y roles de IAM de Managed Service para Apache Spark.