Les charges de travail par lot et les sessions interactives Serverless pour Apache Spark s'exécutent avec des identifiants d'utilisateur final ou de compte de service. Lorsque des identifiants de compte de service sont utilisés, le compte de service utilisé pour exécuter des charges de travail par lot ou des sessions interactives dépend de la version d'exécution du lot ou de la session.
Comptes de service d'exécution antérieurs à la version 3.0
Les versions d'exécution Spark antérieures à 3.0 avec des identifiants de compte de service utilisent le
compte de service Compute Engine par défaut ou un compte de service personnalisé
spécifié par l'utilisateur pour envoyer une charge de travail par lot ou créer une session interactive.
Comptes de service d'exécution 3.0 et versions ultérieures
Les versions d'exécution Spark 3.0 et ultérieures avec des identifiants de compte de service utilisent un
compte de service personnalisé spécifié par l'utilisateur pour envoyer une charge de travail par lot ou créer une
session interactive.
Les exécutions Serverless pour Apache Spark 3.0 et versions ultérieures créent le
compte de service **Agent de service de nœud Resource Manager pour Dataproc**, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, avec le
rôle **Agent de service de nœud Resource Manager pour Dataproc**
dans un projet utilisateur Dataproc Google Cloud . Ce compte de service
effectue les opérations système suivantes sur les ressources Serverless pour Apache Spark
situées dans le projet où une charge de travail est créée :
- Cloud Logging et Cloud Monitoring
- Opérations de base de l'agent de service de nœud Resource Manager pour Dataproc, telles que
get,heartbeatetmintOAuthToken
Afficher et gérer les rôles de compte de service IAM
Pour afficher et gérer les rôles attribués à la charge de travail par lot ou au compte de service de session, procédez comme suit :
Dans la Google Cloud console, accédez à la page IAM.
Cliquez sur Inclure les attributions de rôles fournies par Google.
Affichez les rôles listés pour le compte de service par défaut ou personnalisé de la charge de travail par lot ou de la session par défaut ou personnalisé.
L'image suivante montre le rôle Nœud de calcul Dataproc requis pour le compte de service Compute Engine par défaut,
project_number-compute@developer.gserviceaccount.com, que Serverless pour Apache Spark utilise par défaut comme compte de service de charge de travail ou de session.
Rôle Nœud de calcul Dataproc attribué au compte de service Compute Engine par défaut dans la section IAM de la Google Cloud console. Vous pouvez cliquer sur l'icône en forme de crayon affichée sur la ligne du compte de service pour attribuer ou supprimer des rôles de compte de service.
Utiliser un compte de service multiprojet
Vous pouvez envoyer une charge de travail par lot qui utilise un
compte de service d'un projet différent de celui de la charge de travail par lot
(le projet dans lequel le lot est envoyé). Dans cette section, le projet dans lequel
se trouve le compte de service est appelé service account project, et le
projet dans lequel le lot est envoyé est appelé batch project.
Pourquoi utiliser un compte de service multiprojet pour exécuter une charge de travail par lot ? L'une des raisons possibles est que le compte de service de l'autre projet s'est vu attribuer des rôles IAM qui offrent un accès précis aux ressources de ce projet.
Procédure de configuration
Les exemples de cette section s'appliquent à l'envoi d'une charge de travail par lot
exécutée avec une version d'exécution antérieure à 3.0.
Dans le projet de compte de service :
Autorisez l'association de comptes de service entre les projets.
Enable the Dataproc API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.Attribuez à votre compte de messagerie (l'utilisateur qui crée le cluster) le rôle Utilisateur du compte de service dans le projet de compte de service ou, pour un contrôle plus précis, dans le compte de service du projet de compte de service.
Pour en savoir plus, consultez Gérer l'accès aux projets, aux dossiers et aux organisations pour attribuer des rôles au niveau du projet et Gérer l'accès aux comptes de service pour attribuer des rôles au niveau du compte de service.
Exemples de CLI gcloud :
L'exemple de commande suivant attribue à l'utilisateur le rôle Utilisateur du compte de service au niveau du projet :
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Remarques :
USER_EMAIL: indiquez l'adresse e-mail de votre compte utilisateur au formatuser:user-name@example.com.
L'exemple de commande suivant attribue à l'utilisateur le rôle Utilisateur du compte de service au niveau du compte de service :
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Remarques :
USER_EMAIL: indiquez l'adresse e-mail de votre compte utilisateur au formatuser:user-name@example.com.
Attribuez au compte de service le rôle Nœud de calcul Dataproc dans le projet par lot.
Exemple de CLI 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"
Dans le projet par lot :
Attribuez au compte de service de l'agent de service Dataproc les rôles Utilisateur du compte de service et Créateur de jetons du compte de service dans le projet de compte de service ou, pour un contrôle plus précis, dans le compte de service du projet de compte de service. Vous autorisez ainsi le compte de service de l'agent de service Dataproc dans le projet par lot à créer des jetons pour le compte de service dans le projet de compte de service.
Pour en savoir plus, consultez Gérer l'accès aux projets, aux dossiers et aux organisations pour attribuer des rôles au niveau du projet et Gérer l'accès aux comptes de service pour attribuer des rôles au niveau du compte de service.
Exemples de CLI gcloud :
Les commandes suivantes attribuent au compte de service de l'agent de service Dataproc compte de service dans le projet par lot les rôles Utilisateur du compte de service et Créateur de jetons du compte de service au niveau du projet :
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"
Les exemples de commandes suivants attribuent au compte de service de l'agent de service Dataproc dans le projet par lot les rôles Utilisateur du compte de service et Service Créateur de jetons du compte de service au niveau du compte de service :
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"
Attribuez au compte de service de l'agent de service Compute Engine dans le projet par lot le rôle Créateur de jetons du compte de service dans le projet de compte de service ou, pour un contrôle plus précis, dans le compte de service du projet de compte de service. Vous autorisez ainsi le compte de service de l'agent de service Compute Engine dans le projet par lot à créer des jetons pour le compte de service dans le projet de compte de service.
Pour en savoir plus, consultez Gérer l'accès aux projets, aux dossiers et aux organisations pour attribuer des rôles au niveau du projet et Gérer l'accès aux comptes de service pour attribuer des rôles au niveau du compte de service.
Exemples de CLI gcloud :
L'exemple de commande suivant attribue au compte de service de l'agent de service Compute Engine dans le projet par lot le rôle Créateur de jetons du compte de service au niveau du projet :
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"
L'exemple de commande suivant attribue au compte de service de l'agent de service Compute Engine dans le projet de cluster le rôle Créateur de jetons du compte de service au niveau du compte de service :
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"
Envoyer la charge de travail par lot
Une fois la configuration terminée, vous pouvez envoyer une charge de travail par lot. Veillez à spécifier le compte de service dans le projet de compte de service comme compte de service à utiliser pour la charge de travail par lot.
Résoudre les échecs basés sur les autorisations
Des autorisations incorrectes ou insuffisantes pour le compte de service utilisé par votre charge de travail par lot ou votre session peuvent entraîner des échecs de création de lot ou de session qui signalent un message d'erreur "Driver compute node failed to initialize for batch in 600 seconds" (Le nœud de calcul du pilote n'a pas pu être initialisé pour le lot en 600 secondes). Cette erreur indique que le pilote Spark n'a pas pu démarrer dans le délai imparti, souvent en raison d'un manque d' accès aux Google Cloud ressources nécessaires.
Pour résoudre ce problème, vérifiez que votre compte de service dispose des rôles ou autorisations minimales suivants :
- Rôle Nœud de calcul Dataproc (
roles/dataproc.worker) : ce rôle accorde les autorisations nécessaires à Serverless pour Apache Spark afin de gérer et d'exécuter les charges de travail et les sessions Spark. - Lecteur des objets Storage (
roles/storage.objectViewer), Créateur des objets Storage (roles/storage.objectCreator) ou Administrateur des objets de l'espace de stockage (roles/storage.admin) : si votre application Spark lit ou écrit dans des buckets Cloud Storage, le compte de service a besoin des autorisations appropriées pour accéder aux buckets. Par exemple, si vos données d'entrée se trouvent dans un bucket Cloud Storage,Storage Object Viewerest requis. Si votre application écrit des données de sortie dans un bucket Cloud Storage,Storage Object CreatorouStorage Object Adminest nécessaire. - Éditeur de données BigQuery (
roles/bigquery.dataEditor) ou Lecteur de données BigQuery (roles/bigquery.dataViewer) : si votre application Spark interagit avec BigQuery, vérifiez que le compte de service dispose des rôles BigQuery appropriés. - Autorisations Cloud Logging : le compte de service a besoin d'autorisations
pour écrire des journaux dans Cloud Logging afin de déboguer efficacement. En règle générale, le
Logging Writerrôle (roles/logging.logWriter) est suffisant.
Échecs courants liés aux autorisations ou à l'accès
Rôle
dataproc.workermanquant : sans ce rôle de base, l'infrastructure Serverless pour Apache Spark ne peut pas provisionner et gérer correctement le nœud de pilote.Autorisations Cloud Storage insuffisantes : si votre application Spark tente de lire des données d'entrée ou d'écrire des données de sortie dans un bucket Cloud Storage sans les autorisations de compte de service nécessaires, le pilote peut ne pas s'initialiser, car il n'a pas accès aux ressources critiques.
Problèmes de réseau ou de pare-feu : les règles de pare-feu ou VPC Service Controls peuvent bloquer par inadvertance l'accès du compte de service aux Google Cloud API ou aux ressources.
Pour vérifier et mettre à jour les autorisations du compte de service :
- Accédez à la page IAM et administration > IAM de la Google Cloud console.
- Recherchez le compte de service utilisé pour vos charges de travail par lot ou vos sessions.
- Vérifiez que les rôles nécessaires sont attribués. Si ce n'est pas le cas, ajoutez-les.
Pour obtenir la liste des rôles et autorisations Serverless pour Apache Spark, consultez Autorisations Serverless pour Apache Spark et rôles IAM.