Spark-Job in Dataproc in der Google Kubernetes Engine ausführen

In diesem Dokument werden zunächst Alternativen zum Ausführen von Spark-Jobs in einem Dataproc on Google Kubernetes Engine-Cluster aufgeführt. Anschließend wird gezeigt, wie Sie einen virtuellen Dataproc-Cluster in GKE erstellen und einen Spark-Job im Cluster ausführen.

Übersicht über die Optionen

Dataproc auf GKE bietet zwar eine leistungsstarke Steuerung für containerisierte Umgebungen,Google Cloud bietet aber auch vollständig verwaltete und serverlose Optionen, die den Betrieb vereinfachen und die Entwicklung beschleunigen können.

  • Dataproc in Compute Engine:Dataproc in Compute Engine bietet eine vertraute, VM-basierte Umgebung mit maximaler Kontrolle über Ihre Clusterumgebung und ist ideal für die Migration vorhandener Hadoop- und Spark-Arbeitslasten.

  • Google Cloud Serverless for Apache Spark:Mit Serverless for Apache Spark können Sie sich auf Ihren Code konzentrieren, da die automatische Skalierung für einen aufwandlosen Betrieb sorgt. Sie eignet sich auch ideal für neue Pipelines und interaktive Analysen.

Einen Vergleich der Spark-Bereitstellungsoptionen finden Sie unter Besten Spark-Dienst auswählen.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  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. Prüfen Sie, ob Sie die Berechtigungen haben, die für diese Anleitung erforderlich sind.

  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. Install the 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. Prüfen Sie, ob Sie die Berechtigungen haben, die für diese Anleitung erforderlich sind.

  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. Install the 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 zonenbasierten oder regionalen Google Kubernetes Engine-Cluster (GKE) im Standardmodus (nicht im Autopilot-Modus) erstellt haben, in dem Workload Identity aktiviert ist.

  17. 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 Dataproc-Clusters benötigen:

    Dienstkontorolle

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

    Virtuellen Dataproc-Cluster in GKE erstellen

    Ein virtueller Dataproc-Cluster in GKE wird als Deployment-Plattform für Dataproc-Komponenten erstellt. Es handelt sich um eine virtuelle Ressource, die im Gegensatz zu einem Dataproc on Compute Engine-Cluster keine separaten Dataproc-Master- und Worker-VMs enthält.

    • Bei Dataproc on GKE werden Knotenpools in einem GKE-Cluster erstellt, wenn Sie einen virtuellen Dataproc on GKE-Cluster erstellen.

    • Dataproc 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.

      • Für jeden virtuellen Cluster gilt:
        • 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

    1. Rufen Sie in der Google Cloud Console die Seite Cluster für Dataproc auf.

      Zu den Clustern

    2. Klicken Sie auf Cluster erstellen.

    3. Klicken Sie im Dialogfeld Dataproc-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 Dataproc on GKE-Cluster aus. Diese Region muss mit der Region übereinstimmen, in der sich Ihr vorhandener GKE-Cluster befindet (die Sie im nächsten Element 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: Klicken Sie im Feld Cloud Storage-Staging-Bucket auf Durchsuchen, um einen vorhandenen Cloud Storage-Bucket auszuwählen. Dataproc auf GKE stellt Artefakte im Bucket bereit. Ignorieren Sie dieses Feld, damit Dataproc auf 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 Dataproc on GKE-Knotenpool 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 Dataproc on GKE-Knotenpool:
        1. Klicken Sie auf Neuen Knotenpool erstellen.
        2. Geben Sie die folgenden Knotenpoolwerte ein:
          • Knotenpoolname
          • Rolle: Mindestens ein Knotenpool muss die Standardrolle (DEFAULT) haben.
          • Standort: Geben Sie eine Zone innerhalb der Dataproc on GKE-Clusterregion an.
          • Maschinentyp des Knotenpools
          • CPU-Plattform
          • Unterbrechbarkeit
          • Min: Mindestanzahl von Knoten.
          • Max: Maximale Knotenanzahl. Die maximale Knotenanzahl 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 Dataproc Persistent History Server (PHS) eingerichtet haben, um den Spark-Jobverlauf in aktiven und gelöschten Dataproc on GKE-Clustern aufzurufen, klicken Sie auf Cluster anpassen. Suchen Sie dann im Feld Verlaufsservercluster nach Ihrem PHS-Cluster und wählen Sie ihn aus. Der PHS-Cluster muss sich in derselben Region wie der virtuelle Dataproc on GKE-Cluster befinden.

    7. Klicken Sie auf Erstellen, um den Dataproc-Cluster zu erstellen. Ihr Dataproc on GKE-Cluster wird auf der Seite Cluster in einer Liste angezeigt. Der Status ist Wird bereitgestellt, bis der Cluster verwendet werden kann. Anschließend ändert sich der Status in Wird ausgeführt.

    gcloud

    Legen Sie Umgebungsvariablen fest und führen Sie den Befehl gcloud dataproc clusters gke create lokal oder in Cloud Shell aus, um ein Dataproc-on-GKE-Cluster zu erstellen.

    1. Legen Sie Umgebungsvariablen fest:

      DP_CLUSTER=Dataproc on GKE  cluster-name \
        REGION=region \
        GKE_CLUSTER=GKE cluster-name \
        BUCKET=Cloud Storage bucket-name \
        DP_POOLNAME=node pool-name
        PHS_CLUSTER=Dataproc PHS server name
      
      Hinweise:

      • DP_CLUSTER: Legen Sie den Namen des virtuellen Dataproc-Clusters fest. Er muss mit einem Kleinbuchstaben beginnen, gefolgt von bis zu 54 Kleinbuchstaben, Ziffern oder Bindestrichen. Das letzte Zeichen darf kein Bindestrich sein.
      • 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, den Dataproc für das Staging von Artefakten verwendet. Wenn Sie keinen Bucket angeben, erstellt Dataproc on GKE einen Staging-Bucket.
      • DP_POOLNAME: Der Name eines Knotenpools, der im GKE-Cluster erstellt werden soll.
      • PHS_CLUSTER: (Optional) Dataproc PHS-Server, der zum Aufrufen des Spark-Jobverlaufs in aktiven und gelöschten Dataproc on GKE-Clustern verwendet werden soll. Der PHS-Cluster muss sich in derselben Region wie der virtuelle Dataproc on GKE-Cluster 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 Dataproc-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 Dataproc auf GKE einen Staging-Bucket erstellt.
      • --pools: Mit diesem Flag wird ein neuer oder vorhandener Knotenpool angegeben, den Dataproc zum Ausführen des Arbeitslast verwendet. Liste der Dataproc-on-GKE-Knotenpooleinstellungen, 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. Für mindestens einen Knotenpool muss die Rolle default angegeben werden. 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 Cloud Dataproc-VM-Dienstkonto (Identität der Datenebene) des virtuellen Clusters fungieren.

    REST

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

    Ersetzen Sie diese Werte in den folgenden Anfragedaten:

    • PROJECT: ID des Google Cloud-Projekts.
    • REGION: Region des virtuellen Dataproc-Clusters (dieselbe Region wie die vorhandene GKE-Clusterregion)
    • DP_CLUSTER: Name des Dataproc-Clusters
    • GKE_CLUSTER: GKE-Clustername
    • 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 Dataproc auf 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 Dataproc-Cluster in GKE ausgeführt wird, können Sie einen Spark-Job übermitteln. Verwenden Sie dazu die Google Cloud Console, die gcloud CLI oder die Dataproc-jobs.submitAPI (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 mit 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