Batcharbeitslasten und interaktive Sitzungen von Managed Service for Apache Spark werden entweder mit Endnutzer- oder Dienstkontoanmeldedaten ausgeführt. Wenn Dienstkontoanmeldedaten verwendet werden, hängt das Dienstkonto, das zum Ausführen von Batcharbeitslasten oder interaktiven Sitzungen verwendet wird, von der Batch- oder Sitzungs-Laufzeitversion ab.
Laufzeitdienstkonten vor Version 3.0
Bei Spark-Laufzeitversionen vor 3.0 mit Dienstkontoanmeldedaten wird das Compute Engine-Standarddienstkonto oder ein benutzerdefiniertes Dienstkonto verwendet, um einen Batcharbeitslast zu senden oder eine interaktive Sitzung zu erstellen.
Laufzeitdienstkonten ab Version 3.0
Bei Spark-Laufzeitversionen 3.0 und höher mit Dienstkontoanmeldedaten wird ein vom Nutzer angegebenes benutzerdefiniertes Dienstkonto verwendet, um einen Batch-Arbeitslast zu senden oder eine interaktive Sitzung zu erstellen.
In Managed Service for Apache Spark 3.0 und späteren Runtimes wird das Dienstkonto Dataproc Resource Manager Node Service Agent, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, mit der Rolle Dataproc Resource Manager Node Service Agent im Google Cloud -Projekt eines Managed Service for Apache Spark-Nutzers erstellt. Mit diesem Dienstkonto werden die folgenden Systemvorgänge für Managed Service for Apache Spark-Ressourcen im Projekt ausgeführt, in dem eine Arbeitslast erstellt wird:
- Cloud Logging und Cloud Monitoring
- Grundlegende Vorgänge für den Resource Manager-Knoten von Managed Service for Apache Spark, z. B.
get,heartbeatundmintOAuthToken
IAM-Dienstkontorollen ansehen und verwalten
So rufen Sie die Rollen auf, die der Batcharbeitslast oder dem Sitzungsdienstkonto zugewiesen sind, und verwalten sie:
Rufen Sie in der Google Cloud Console die Seite IAM auf.
Klicken Sie auf Von Google bereitgestellte Rollenzuweisungen einschließen.
Rufen Sie die Rollen auf, die für die Batcharbeitslast oder das Standard- oder benutzerdefinierte Dienstkonto der Sitzung oder des Standard- oder benutzerdefinierten Dienstkontos aufgeführt sind.
Das folgende Bild zeigt die erforderliche Rolle Managed Service for Apache Spark Worker für das standardmäßige Compute Engine-Dienstkonto,
project_number-compute@developer.gserviceaccount.com, das von Managed Service for Apache Spark standardmäßig als Dienstkonto für Arbeitslasten oder Sitzungen verwendet wird.
Die Rolle „Managed Service for Apache Spark Worker“, die dem standardmäßigen Compute Engine-Dienstkonto im IAM-Bereich der Google Cloud Console zugewiesen ist. Sie können auf das Stiftsymbol in der Dienstkontozeile klicken, um Dienstkontorollen zuzuweisen oder zu entfernen.
Projektübergreifendes Dienstkonto verwenden
Sie können eine Batcharbeitslast einreichen, für die ein Dienstkonto aus einem anderen Projekt als dem Batcharbeitslastprojekt (dem Projekt, in dem der Batch eingereicht wird) verwendet wird. In diesem Abschnitt wird das Projekt, in dem sich das Dienstkonto befindet, als service account project bezeichnet und das Projekt, in dem der Batch gesendet wird, als batch project.
Warum sollte ein projektübergreifendes Dienstkonto zum Ausführen einer Batch-Arbeitslast verwendet werden? Ein möglicher Grund ist, dass dem Dienstkonto im anderen Projekt IAM-Rollen zugewiesen wurden, die einen detaillierten Zugriff auf die Ressourcen in diesem Projekt ermöglichen.
Einrichtungsschritte
Die Beispiele in diesem Abschnitt beziehen sich auf das Senden einer Batcharbeitslast, die mit einer Laufzeitversion vor 3.0 ausgeführt wird.
Im Dienstkontoprojekt:
Ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können
die Dataproc API aktivieren
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von RollenWeisen Sie Ihrem E-Mail-Konto (dem Nutzer, der den Cluster erstellt) die Rolle Dienstkontonutzer entweder für das Dienstkontoprojekt oder, für eine detailliertere Steuerung, für das Dienstkonto im Dienstkontoprojekt zu.
Weitere Informationen zum Zuweisen von Rollen auf Projektebene finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten. Informationen zum Zuweisen von Rollen auf Dienstkontoebene finden Sie unter Zugriff auf Dienstkonten verwalten.
Beispiele für die gcloud CLI:
Mit dem folgenden Beispielbefehl wird dem Nutzer die Rolle „Dienstkontonutzer“ auf Projektebene zugewiesen:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Hinweise:
USER_EMAIL: Geben Sie die E-Mail-Adresse Ihres Nutzerkontos im Formatuser:user-name@example.coman.
Mit dem folgenden Beispielbefehl wird dem Nutzer die Rolle „Dienstkontonutzer“ auf Dienstkontoebene zugewiesen:
gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
Hinweise:
USER_EMAIL: Geben Sie die E-Mail-Adresse Ihres Nutzerkontos im folgenden Format an:user:user-name@example.com.
Weisen Sie dem Dienstkonto im Batchprojekt die Rolle Managed Service for Apache Spark-Worker zu.
Beispiel für die gcloud CLI:
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"
Im Batchprojekt:
Weisen Sie dem Dienstkonto des Dienst-Agents für Managed Service for Apache Spark die Rollen Dienstkontonutzer und Ersteller von Dienstkonto-Tokens entweder für das Dienstkontoprojekt oder, für eine detailliertere Steuerung, für das Dienstkonto im Dienstkontoprojekt zu. Dadurch erlauben Sie dem Dienstkonto des Dienst-Agents für Managed Service for Apache Spark im Batchprojekt, Tokens für das Dienstkonto im Dienstkontoprojekt zu erstellen.
Weitere Informationen zum Zuweisen von Rollen auf Projektebene finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten. Informationen zum Zuweisen von Rollen auf Dienstkontoebene finden Sie unter Zugriff auf Dienstkonten verwalten.
Beispiele für die gcloud CLI:
Mit den folgenden Befehlen werden dem Dienstkonto des Dienst-Agents für Managed Service for Apache Spark im Batch-Projekt die Rollen „Dienstkontonutzer“ und „Ersteller von Dienstkonto-Tokens“ auf Projektebene zugewiesen:
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"
Mit den folgenden Beispielbefehlen werden dem Dienstkonto des Managed Service for Apache Spark Service Agent im Batchprojekt die Rollen „Dienstkontonutzer“ und „Ersteller von Dienstkonto-Tokens“ auf Dienstkontoebene zugewiesen:
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"
Weisen Sie dem Compute Engine-Dienstkonto-Agent im Batch-Projekt die Rolle Ersteller von Dienstkonto-Tokens entweder für das Dienstkonto-Projekt oder, für eine detailliertere Steuerung, für das Dienstkonto im Dienstkonto-Projekt zu. Dadurch gewähren Sie dem Dienstkonto des Compute Agent Service Agent im Batchprojekt die Möglichkeit, Tokens für das Dienstkonto im Dienstkontoprojekt zu erstellen.
Weitere Informationen zum Zuweisen von Rollen auf Projektebene finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten. Informationen zum Zuweisen von Rollen auf Dienstkontoebene finden Sie unter Zugriff auf Dienstkonten verwalten.
Beispiele für die gcloud CLI:
Mit dem folgenden Beispielbefehl wird dem Dienstkonto des Compute Engine Service Agent im Batch-Projekt die Rolle „Ersteller von Dienstkonto-Tokens“ auf Projektebene zugewiesen:
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"
Mit dem folgenden Beispielbefehl wird dem Dienstkonto des Compute Engine-Dienst-Agents im Clusterprojekt die Rolle „Ersteller von Dienstkonto-Tokens“ auf Dienstkontoebene zugewiesen:
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"
Batcharbeitslast senden
Nachdem Sie die Einrichtungsschritte abgeschlossen haben, können Sie eine Batch-Arbeitslast senden. Geben Sie das Dienstkonto im Dienstkontoprojekt als das Dienstkonto an, das für den Batch-Arbeitslast verwendet werden soll.
Fehler aufgrund von Berechtigungen beheben
Falsche oder unzureichende Berechtigungen für das Dienstkonto, das von Ihrer Batch-Arbeitslast oder ‑Sitzung verwendet wird, können zu Fehlern beim Erstellen von Batches oder Sitzungen führen, bei denen die Fehlermeldung „Driver compute node failed to initialize for batch in 600 seconds“ (Die Initialisierung des Driver-Rechenknotens für den Batch ist nach 600 Sekunden fehlgeschlagen) angezeigt wird. Dieser Fehler gibt an, dass der Spark-Treiber nicht innerhalb des zugewiesenen Zeitlimits gestartet werden konnte. Das liegt häufig daran, dass der erforderliche Zugriff auf Google Cloud Ressourcen fehlt.
Prüfen Sie zur Fehlerbehebung, ob Ihr Dienstkonto die folgenden Mindestrollen oder -berechtigungen hat:
- Rolle Managed Service for Apache Spark Worker (
roles/dataproc.worker): Diese Rolle gewährt die erforderlichen Berechtigungen für Managed Service for Apache Spark zum Verwalten und Ausführen von Spark-Arbeitslasten und -Sitzungen. - Storage-Objekt-Betrachter (
roles/storage.objectViewer), Storage-Objekt-Ersteller (roles/storage.objectCreator) oder Storage-Objekt-Administrator (roles/storage.admin): Wenn Ihre Spark-Anwendung Daten aus Cloud Storage-Buckets liest oder in Cloud Storage-Buckets schreibt, benötigt das Dienstkonto die entsprechenden Berechtigungen für den Zugriff auf die Buckets. Wenn sich Ihre Eingabedaten beispielsweise in einem Cloud Storage-Bucket befinden, istStorage Object Viewererforderlich. Wenn Ihre Anwendung Ausgaben in einen Cloud Storage-Bucket schreibt, istStorage Object CreatoroderStorage Object Adminerforderlich. - BigQuery-Dateneditor (
roles/bigquery.dataEditor) oder BigQuery-Datenbetrachter (roles/bigquery.dataViewer): Wenn Ihre Spark-Anwendung mit BigQuery interagiert, prüfen Sie, ob das Dienstkonto die entsprechenden BigQuery-Rollen hat. - Cloud Logging-Berechtigungen:Das Dienstkonto benötigt Berechtigungen zum Schreiben von Logs in Cloud Logging, um Fehler effektiv beheben zu können. Normalerweise reicht die Rolle
Logging Writer(roles/logging.logWriter) aus.
Häufige Fehler im Zusammenhang mit Berechtigungen oder Zugriff
Fehlende
dataproc.worker-Rolle: Ohne diese Kernrolle kann die Infrastruktur von Managed Service for Apache Spark den Treibernknoten nicht richtig bereitstellen und verwalten.Unzureichende Cloud Storage-Berechtigungen: Wenn Ihre Spark-Anwendung versucht, Eingabedaten aus einem Cloud Storage-Bucket zu lesen oder Ausgabedaten in einen Cloud Storage-Bucket zu schreiben, ohne die erforderlichen Dienstkontoberechtigungen zu haben, kann die Initialisierung des Treibers fehlschlagen, da er keinen Zugriff auf wichtige Ressourcen hat.
Netzwerk- oder Firewallprobleme: VPC Service Controls oder Firewallregeln können den Zugriff von Dienstkonten auf Google Cloud APIs oder -Ressourcen versehentlich blockieren.
So prüfen und aktualisieren Sie Dienstkontoberechtigungen:
- Rufen Sie in der Google Cloud Console die Seite IAM & Verwaltung > IAM auf.
- Suchen Sie das Dienstkonto, das für Ihre Batcharbeitslasten oder ‑sitzungen verwendet wird.
- Prüfen Sie, ob die erforderlichen Rollen zugewiesen sind. Falls nicht, fügen Sie sie hinzu.
Eine Liste der Rollen und Berechtigungen für Managed Service for Apache Spark finden Sie unter Berechtigungen und IAM-Rollen für Managed Service for Apache Spark.