Spark-Job in Google Kubernetes Engine ausführen

In diesem Dokument wird beschrieben, 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

Während Managed Service for Apache Spark in GKE eine leistungsstarke Steuerung für containerisierte Umgebungen bietet, bietetGoogle Cloud 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 Besten Spark-Dienst auswählen.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. 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, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  6. Install the Google Cloud CLI.

  7. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  8. To initialize the gcloud CLI, run the following command:

    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, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  13. Install the Google Cloud CLI.

  14. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  15. To initialize the gcloud CLI, run the following command:

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

Erforderliche Rollen

Für die Ausführung der Beispiele auf dieser Seite sind bestimmte IAM-Rollen erforderlich. 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

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

Virtuellen Cluster erstellen

Ein virtueller Cluster für Managed Service for Apache Spark in GKE wird als Deployment-Plattform 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 on Compute Engine-Cluster keine separaten Master- und Worker-VMs für Managed Service for Apache Spark umfasst.

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

  • Managed Service for Apache Spark on 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 Arbeitslastidentität.
      • ist in einem separaten GKE-Namespace im GKE-Cluster isoliert.

Console

Das Erstellen eines Managed Service for Apache Spark on GKE-Clusters wird in der Google Cloud -Konsole nicht unterstützt.

gcloud

Legen Sie Umgebungsvariablen fest und führen Sie dann den Befehl gcloud dataproc clusters gke create lokal oder in Cloud Shell aus, um einen Managed Service for Apache Spark on GKE-Cluster 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 Clusters für Managed Service for Apache Spark fest. Er muss mit einem Kleinbuchstaben beginnen, gefolgt von bis zu 54 Kleinbuchstaben, Ziffern oder Bindestrichen. Es 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-Buckets angeben, der von Managed Service for Apache Spark zum Staging von Artefakten verwendet wird. Wenn Sie keinen Bucket angeben, wird ein Staging-Bucket von Managed Service for Apache Spark in GKE erstellt.
    • 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 on GKE-Cluster aufrufen können. Der PHS-Cluster muss sich in derselben Region wie der virtuelle Cluster von Managed Service for Apache Spark on 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:

    • --spark-engine-version: Die Spark-Image-Version, die im Managed Service for Apache Spark-Cluster verwendet wird. Sie können eine Kennung wie 3, 3.1 oder latest verwenden oder die vollständige Subminor-Version angeben, z. B. 3.1-dataproc-5.
    • --staging-bucket: Löschen Sie dieses Flag, damit mit Managed Service for Apache Spark in GKE ein Staging-Bucket erstellt wird.
    • --pools: Mit diesem Flag wird ein neuer oder vorhandener Knotenpool angegeben, der von Managed Service for Apache Spark zum Ausführen der Arbeitslast erstellt oder verwendet wird. Liste der Einstellungen für Managed Service for Apache Spark-Knotenpools in GKE, durch Kommas getrennt, z. B.:
      --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10
      
      Sie müssen den Knotenpool name und role angeben. Andere Knotenpooleinstellungen sind optional. Sie können mehrere --pools-Flags verwenden, um mehrere Knotenpools anzugeben. Mindestens ein Knotenpool muss die Rolle default haben. Alle Knotenpools müssen denselben Standort haben.
    • --setup-workload-identity: Mit diesem Flag werden Workload Identity-Bindungen aktiviert. Durch diese Bindungen können die Kubernetes-Dienstkonten (Kubernetes Service Accounts, KSAs) als Standard-VM-Dienstkonto für Managed Service for Apache Spark (Identität der Datenebene) des virtuellen Clusters fungieren.

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: Dataproc-Region für den virtuellen Cluster (dieselbe Region wie die vorhandene GKE-Clusterregion)
  • 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 Cluster für Managed Service for Apache Spark in GKE ausgeführt wird, können Sie einen Spark-Job über die Google Cloud Console, die gcloud CLI oder die jobs.submit-API für Managed Service for Apache Spark (mit direkten HTTP-Anfragen oder den Cloud-Clientbibliotheken) einreichen.

**Beispiel für einen gcloud CLI-Spark-Job:**

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 mit 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