Spark-Job in Google Kubernetes Engine ausführen

In diesem Dokument erfahren Sie, wie Sie einen virtuellen Managed Service for Apache Spark-Cluster in GKE erstellen, und dann einen Spark-Job im Cluster ausführen.

Übersicht über die Optionen

Managed Service for Apache Spark in GKE bietet zwar eine leistungsstarke Steuerung für containerisierte Umgebungen, Google Cloud aber auch vollständig verwaltete und serverlose Optionen, die den Betrieb vereinfachen und die Entwicklung beschleunigen können. Einen Vergleich der Bereitstellungsoptionen für Spark Managed Service for Apache Spark finden Sie unter Den besten Spark-Dienst auswählen.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Google Cloud-Nutzer sind, erstellen Sie ein Konto, um zu sehen, wie sich unsere Produkte in realen Szenarien schlagen. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that you have the permissions required to complete this guide.

  4. Verify that billing is enabled for your Google Cloud project.

  5. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. Installieren Sie die Google Cloud CLI.

  7. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  8. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  9. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that you have the permissions required to complete this guide.

  11. Verify that billing is enabled for your Google Cloud project.

  12. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  13. Installieren Sie die Google Cloud CLI.

  14. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  15. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  16. Sie müssen einen Standardcluster (kein Autopilot-Cluster) von Google Kubernetes Engine (GKE) zonenbezogenen oder regionalen Cluster erstellt haben, in dem Workload Identity aktiviert ist.

Erforderliche Rollen

Bestimmte IAM-Rollen sind erforderlich, um die Beispiele auf dieser Seite auszuführen. Je nach Organisationsrichtlinien wurden diese Rollen möglicherweise bereits gewährt. Informationen zum Prüfen von Rollenzuweisungen finden Sie unter Müssen Sie Rollen zuweisen?.

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Nutzerrollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Managed Service for Apache Spark-Clusters benötigen:

Dienstkontorolle

Damit das Compute Engine-Standarddienstkonto die erforderlichen Berechtigungen zum Erstellen eines Managed Service for Apache Spark-Clusters hat, bitten Sie Ihren Administrator, dem Compute Engine-Standarddienstkonto die IAM-Rolle Dataproc-Worker (roles/dataproc.worker) für das Projekt zuzuweisen.

Virtuellen Cluster erstellen

Ein virtueller Managed Service for Apache Spark-Cluster in GKE wird als Bereitstellungsplattform für Managed Service for Apache Spark-Komponenten erstellt. Es handelt sich um eine virtuelle Ressource, die im Gegensatz zu einem Managed Service for Apache Spark-Cluster in Compute Engine keine separaten Master- und Worker-VMs für Managed Service for Apache Spark enthält.

  • Managed Service for Apache Spark in GKE erstellt Knotenpools in einem GKE Cluster, wenn Sie einen virtuellen Managed Service for Apache Spark-Cluster in GKE erstellen.

  • Managed Service for Apache Spark in GKE-Jobs werden als Pods in diesen Knotenpools ausgeführt. Die Knotenpools und die Planung von Pods in den Knotenpools werden von GKE verwaltet.

  • Mehrere virtuelle Cluster erstellen Sie können mehrere virtuelle Cluster in einem GKE-Cluster erstellen und ausführen, um die Ressourcennutzung zu verbessern, indem Sie Knotenpools für die virtuellen Cluster freigeben.

    • Jeder virtuelle Cluster:
      • wird mit separaten Eigenschaften erstellt, einschließlich der Spark-Engine-Version und der Workload Identity.
      • ist in einem separaten GKE-Namespace im GKE-Cluster isoliert.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Managed Service for Apache Spark Cluster auf.

    Zu den Clustern

  2. Klicken Sie auf Cluster erstellen.

  3. Klicken Sie im Dialogfeld Managed Service for Apache Spark-Cluster erstellen in der Zeile Cluster in GKE auf Erstellen.

  4. Gehen Sie im Bereich Cluster einrichten so vor:

    1. Geben Sie im Feld Clustername einen Namen für den Cluster ein.
    2. Wählen Sie in der Liste Region eine Region für den virtuellen Managed Service for Apache Spark-Cluster in GKE aus. Diese Region muss mit der Region übereinstimmen, in der sich Ihr vorhandener GKE-Cluster befindet (die Sie im nächsten Schritt auswählen).
    3. Klicken Sie im Feld Kubernetes-Cluster auf Durchsuchen , um die Region auszuwählen, in der sich Ihr vorhandener GKE-Cluster befindet.
    4. Optional: Im Feld Cloud Storage-Staging-Bucket können Sie auf Durchsuchen klicken, um einen vorhandenen Cloud Storage-Bucket auszuwählen. Managed Service for Apache Spark in GKE stellt Artefakte im Bucket bereit. Ignorieren Sie dieses Feld, damit Managed Service for Apache Spark in GKE einen Staging-Bucket erstellt.
  5. Klicken Sie im linken Bereich auf Knotenpools konfigurieren und dann im Bereich Knotenpools auf Pool hinzufügen.

    1. So verwenden Sie einen vorhandenen Managed Service for Apache Spark-Knotenpool in GKE wieder:
      1. Klicken Sie auf Vorhandenen Knotenpool wiederverwenden.
      2. Geben Sie den Namen des vorhandenen Knotenpools ein und wählen Sie seine Rolle aus. Mindestens ein Knotenpool muss die Standardrolle (DEFAULT) haben.
      3. Klicken Sie auf Fertig.
    2. So erstellen Sie einen neuen Managed Service for Apache Spark-Knotenpool in GKE:
      1. Klicken Sie auf Einen neuen Knotenpool erstellen.
      2. Geben Sie die folgenden Werte für den Knotenpool ein:
        • Knotenpoolname
        • Rolle: Mindestens ein Knotenpool muss die Standardrolle (DEFAULT) haben.
        • Standort: Geben Sie eine Zone in der Region des Managed Service for Apache Spark-Clusters in GKE an.
        • Maschinentyp des Knotenpools
        • CPU-Plattform
        • Preemptibility
        • Min: Mindestanzahl von Knoten
        • Max: Maximale Anzahl von Knoten Die maximale Anzahl von Knoten muss größer als 0 sein.
    3. Klicken Sie auf Pool hinzufügen , um weitere Knotenpools hinzuzufügen. Alle Knotenpools müssen den Standort haben. Sie können insgesamt vier Knotenpools hinzufügen.
  6. Optional: Wenn Sie einen Persistent History Server (PHS) für Managed Service for Apache Spark eingerichtet haben, um den Spark-Jobverlauf für aktive und gelöschte Managed Service for Apache Spark-Cluster in GKE aufzurufen, klicken Sie auf Cluster anpassen. Suchen Sie dann im Feld History Server-Cluster nach Ihrem PHS-Cluster und wählen Sie ihn aus. Der PHS-Cluster muss sich in derselben Region wie der virtuelle Managed Service for Apache Spark-Cluster in GKE befinden.

  7. Klicken Sie auf Erstellen , um den Managed Service for Apache Spark-Cluster zu erstellen. Ihr Managed Service for Apache Spark-Cluster in GKE wird in einer Liste auf der Seite Cluster angezeigt. Der Status ist Wird bereitgestellt, bis der Cluster einsatzbereit ist. Anschließend ändert sich der Status in Wird ausgeführt.

gcloud

Legen Sie Umgebungsvariablen fest und führen Sie den gcloud dataproc clusters gke create Befehl lokal oder in Cloud Shell aus, um einen Managed Service for Apache Spark-Cluster in GKE zu erstellen.

  1. Legen Sie Umgebungsvariablen fest:

    DP_CLUSTER=Managed Service for Apache Spark on GKE  cluster-name \
      REGION=region \
      GKE_CLUSTER=GKE cluster-name \
      BUCKET=Cloud Storage bucket-name \
      DP_POOLNAME=node pool-name
      PHS_CLUSTER=Managed Service for Apache Spark PHS server name
    
    Hinweise:

    • DP_CLUSTER: Legen Sie den Namen des virtuellen Managed Service for Apache Spark-Clusters fest. Er muss mit einem Kleinbuchstaben beginnen, gefolgt von bis zu 54 Kleinbuchstaben, Ziffern oder Bindestrichen. Er darf nicht mit einem Bindestrich enden.
    • REGION: Die region muss mit der Region übereinstimmen, in der sich der GKE-Cluster befindet.
    • GKE_CLUSTER: Der Name Ihres vorhandenen GKE-Cluster.
    • BUCKET: Optional: Sie können den Namen eines Cloud Storage-Bucketsangeben, der von Managed Service for Apache Spark zum Bereitstellen von Artefakten verwendet wird. Wenn Sie keinen Bucket angeben, erstellt Managed Service for Apache Spark in GKE einen Staging-Bucket.
    • DP_POOLNAME: Der Name eines Knotenpools , der im GKE-Cluster erstellt werden soll.
    • PHS_CLUSTER: Optional: Managed Service for Apache Spark-PHS-Server , mit dem Sie den Spark-Jobverlauf für aktive und gelöschte Managed Service for Apache Spark-Cluster in GKE aufrufen können. Der PHS-Cluster muss sich in derselben Region wie der Managed Service for Apache Spark-Cluster in GKE befinden.
  2. Führen Sie diesen Befehl aus:

    gcloud dataproc clusters gke create ${DP_CLUSTER} \
        --region=${REGION} \
        --gke-cluster=${GKE_CLUSTER} \
        --spark-engine-version=latest \
        --staging-bucket=${BUCKET} \
        --pools="name=${DP_POOLNAME},roles=default" \
        --setup-workload-identity \
        --history-server-cluster=${PHS_CLUSTER}
    
    Hinweise:

REST

Füllen Sie eine virtualClusterConfig als Teil einer cluster.create API-Anfrage aus.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT: Google Cloud-Projekt-ID
  • REGION: Region des virtuellen Dataproc-Clusters (dieselbe Region wie die Region des vorhandenen GKE-Cluster)
  • DP_CLUSTER: Name des Dataproc-Clusters
  • GKE_CLUSTER: Name des GKE-Cluster
  • NODE_POOL: Name des Knotenpools
  • PHS_CLUSTER: Name des Persistent History Server-Clusters (PHS)
  • BUCKET: Optional: Name des Staging-Buckets. Lassen Sie dieses Feld leer, damit Managed Service for Apache Spark in GKE einen Staging-Bucket erstellt.

HTTP-Methode und URL:

POST https://dataproc.googleapis.com/v1/projects/project-id/regions/region/clusters

JSON-Text anfordern:

{
  "clusterName":"DP_CLUSTER",
  "projectId":"PROJECT",
  "virtualClusterConfig":{
    "auxiliaryServicesConfig":{
      "sparkHistoryServerConfig":{
        "dataprocCluster":"projects/PROJECT/regions/REGION/clusters/PHS_CLUSTER"
      }
    },
    "kubernetesClusterConfig":{
      "gkeClusterConfig":{
        "gkeClusterTarget":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER",
        "nodePoolTarget":[
          {
"nodePool":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER/nodePools/NODE_POOL",
            "roles":[
              "DEFAULT"
            ]
          }
        ]
      },
      "kubernetesSoftwareConfig":{
        "componentVersion":{
          "SPARK":"latest"
        }
      }
    },
    "stagingBucket":"BUCKET"
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:

{
  "projectId":"PROJECT",
  "clusterName":"DP_CLUSTER",
  "status":{
    "state":"RUNNING",
    "stateStartTime":"2022-04-01T19:16:39.865716Z"
  },
  "clusterUuid":"98060b77-...",
  "statusHistory":[
    {
      "state":"CREATING",
      "stateStartTime":"2022-04-01T19:14:27.340544Z"
    }
  ],
  "labels":{
    "goog-dataproc-cluster-name":"DP_CLUSTER",
    "goog-dataproc-cluster-uuid":"98060b77-...",
    "goog-dataproc-location":"REGION",
    "goog-dataproc-environment":"prod"
  },
  "virtualClusterConfig":{
    "stagingBucket":"BUCKET",
    "kubernetesClusterConfig":{
      "kubernetesNamespace":"dp-cluster",
      "gkeClusterConfig":{
"gkeClusterTarget":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER",
        "nodePoolTarget":[
          {
"nodePool":"projects/PROJECT/locations/REGION/clusters/GKE_CLUSTER/nodePools/NODE_POOL",
            "roles":[
              "DEFAULT"
            ]
          }
        ]
      },
      "kubernetesSoftwareConfig":{
        "componentVersion":{
          "SPARK":"3.1-..."
        },
        "properties":{
          "dpgke:dpgke.unstable.outputOnly.endpoints.sparkHistoryServer":"https://...",
          "spark:spark.eventLog.dir":"gs://BUCKET/.../spark-job-history",
          "spark:spark.eventLog.enabled":"true"
        }
      }
    },
    "auxiliaryServicesConfig":{
      "sparkHistoryServerConfig":{
        "dataprocCluster":"projects/PROJECT/regions/REGION/clusters/PHS_CLUSTER"
      }
    }
  }

Spark-Job senden

Nachdem Ihr virtueller Managed Service for Apache Spark-Cluster in GKE ausgeführt wird, senden Sie einen Spark-Job über die Google Cloud Console, die gcloud CLIoder die Managed Service for Apache Spark jobs.submit -API (mit direkten HTTP-Anfragen oder den Cloud-Clientbibliotheken).

Beispiel für einen Spark-Job in der gcloud CLI :

gcloud dataproc jobs submit spark \
    --region=${REGION} \
    --cluster=${DP_CLUSTER} \
    --class=org.apache.spark.examples.SparkPi \
    --jars=local:///usr/lib/spark/examples/jars/spark-examples.jar \
    -- 1000

Beispiel für einen PySpark-Job in der gcloud CLI :

gcloud dataproc jobs submit pyspark \
    --region=${REGION} \
    --cluster=${DP_CLUSTER} \
    local:///usr/lib/spark/examples/src/main/python/pi.py \
    -- 10

Beispiel für einen SparkR-Job in der gcloud CLI :

gcloud dataproc jobs submit spark-r \
    --region=${REGION} \
    --cluster=${DP_CLUSTER} \
    local:///usr/lib/spark/examples/src/main/r/dataframe.R

Bereinigen