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

Hinweis

  1. Sie müssen einen zonalen oder regionalen Standardcluster (Autopilot) von Google Kubernetes Engine erstellt haben, für den Workload Identity im Cluster aktiviert ist.

Virtuellen Dataproc in GKE-Cluster erstellen

Ein virtueller Cluster von Dataproc in GKE wird als Deployment-Plattform für Dataproc-Komponenten erstellt. Es handelt sich dabei um eine virtuelle Ressource. Im Gegensatz zu einem Legacy-Dataproc in Compute Engine-Cluster enthält es keine separaten Dataproc-Master- und -Worker-VMs. Stattdessen erstellt Dataproc in GKE Knotenpools in einem GKE-Cluster, wenn Sie einen virtuellen Cluster in Dataproc on GKE erstellen. Dataproc 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 eine verbesserte Ressourcennutzung zu erhalten. Dazu teilen Sie Knotenpools über die virtuellen Cluster. Jeder virtuelle Cluster wird mit separaten Attributen, einschließlich der Spark-Engine-Version und der Workload Identity, erstellt und in einem separaten GKE-Namespace im GKE-Cluster isoliert. Beim Löschen eines oder mehrerer Dataproc-Cluster in GKE werden die zugehörigen Knotenpools nicht gelöscht. Die Knotenpools werden gelöscht, wenn der GKE-Cluster gelöscht wird (siehe Löschung von Knotenpools).

Console

  1. Rufen Sie in der Google Cloud Console die Dataproc-Seite Cluster 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. Im Bereich Cluster einrichten:

    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-Cluster in Cluster aus. Dies muss dieselbe Region sein, in der sich der vorhandene GKE-Cluster befindet (die Sie im nächsten Element auswählen).
    3. Klicken Sie im Feld Kubernetes-Cluster auf Suchen, um die Region auszuwählen, in der sich der vorhandene 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, den Dataproc in GKE zum Bereitstellen von Artefakten verwendet. Ignorieren Sie dieses Feld, damit Dataproc 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 Dataproc in GKE-Knotenpool:
      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 Rolle DEFAULT haben.
      3. Klicken Sie auf Fertig.
    2. So erstellen Sie einen neuen Dataproc in GKE-Knotenpool:
      1. Klicken Sie auf Neuen Knotenpool erstellen.
      2. Geben Sie die Werte für den Knotenpool, die Rolle, den Standort (Zone innerhalb des Dataproc in GKE-Clusterregion), den Maschinentyp, die CPU-Plattform, die Präemption, Min. (Mindestknotenanzahl) und Max. Knoten (Anzahl der Knoten) ein. Die maximale Anzahl von Knoten muss größer als 0 sein und mindestens ein Knotenpool muss die Rolle DEFAULT haben.
    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 Verlauf von aktiven und gelöschten Dataproc-Clustern in GKE aufzurufen, klicken Sie auf Cluster anpassen. Suchen Sie dann im Feld Verlaufsserver-Cluster den PHS-Cluster und wählen Sie ihn aus. Der PHS-Cluster muss sich in derselben Region wie der virtuelle Dataproc-Cluster in GKE befinden.

  7. Klicken Sie auf Erstellen, um den Dataproc-Cluster zu erstellen. Ihr Dataproc in GKE-Cluster wird in einer Liste auf der Seite Cluster angezeigt. Der Status lautet Provisioning (Bereitstellung), bis der Cluster einsatzbereit ist, und der Status wird dann in Running (Aktiv) geändert.

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 Dataproc in 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. Dieser 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-Clusters.
    • BUCKET (optional): Sie können den Namen eines Cloud Storage-Buckets angeben, den Dataproc zum Bereitstellen von Artefakten verwendet. Wenn Sie keinen Bucket angeben, erstellt Dataproc in GKE einen Staging-Bucket.
    • DP_POOLNAME: Der Name eines Knotenpools, der im GKE-Cluster erstellt werden soll.
    • PHS_CLUSTER (optional): Dataproc PHS Server zum Aufrufen des Spark-Jobverlaufs für aktive und gelöschte Dataproc-Cluster in GKE. Der PHS-Cluster muss sich in derselben Region wie der Dataproc-Cluster von 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: Dies ist die Spark-Image-Version, die im Dataproc-Cluster verwendet wird. Du kannst eine Kennzeichnung wie 3, 3.1 oder latest verwenden oder die vollständige Subversion, z. B. 3.1-dataproc-5, angeben.
    • --staging-bucket: Löschen Sie dieses Flag, damit Dataproc in GKE einen Staging-Bucket erstellt.
    • --pools: Dieses Flag wird verwendet, um einen neuen oder vorhandenen Knotenpool anzugeben, den Dataproc erstellt oder zum Ausführen der Arbeitslast verwendet. Listen Sie die Dataproc-Knoteneinstellungen für GKE auf, die durch Kommas getrennt sind, z. B. --pools=name=dp-default,roles=default,machineType=e2-standard-4,min=0,max=10. Sie müssen die Knotenpools name und role angeben. Die anderen Einstellungen sind optional. Sie können mehrere pools-Flags verwenden, um mehrere Knotenpools anzugeben, aber mindestens eine Knotenabfrage muss die Rolle default haben und alle Knotenpools müssen denselben Standort haben.
    • --setup-workload-identity: Durch dieses Flag werden Workload Identity-Bindungen aktiviert, mit denen die Kubernetes-Dienstkonten (KSAs) als standardmäßiges Dataproc-VM-Dienstkonto (Datenebene-Identität) fungieren können.

REST UND BEFEHLSZEILE

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

Bevor Sie eine der Anfragedaten verwenden, nehmen Sie folgende Ersetzungen vor:

HTTP-Methode und URL:

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

JSON-Text der Anfrage:

{
  "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 in etwa folgende JSON-Antwort 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

Wenn Ihr virtueller Dataproc-Cluster ausgeführt wird, senden Sie einen Spark-Job über die Google Cloud Console, die gcloud-Befehlszeile oder die Dataproc jobs.submit API (über direkte HTTP-Anfragen oder die Cloud-Clientbibliotheken).

Beispiel für die Befehlszeile in gcloud:

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 CLI-PySpark-Job in gcloud:

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

Beispiel für die Befehlszeile von gcloud-Befehlszeile:

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

Bereinigen