Dataproc in Google Kubernetes Engine

Überblick

Mit dieser Funktion können Sie Spark-Jobs über die Dataproc Jobs API an einen laufenden Google Kubernetes Engine-Cluster senden.

Verwenden Sie diese Funktion in folgenden Fällen:

  • Einheitliche Ressourcenverwaltung bereitstellen
  • Spark-Jobs isolieren, damit der Analysezyklus beschleunigt wird

Dataproc-Jobs in GKE ausführen

  1. GKE-Cluster erstellen

    Als Deployment-Plattform für Dataproc-Komponenten wird ein ausgeführter GKE-Cluster benötigt.

    gcloud-Befehl

    Legen Sie Umgebungsvariablen fest und führen Sie den Befehl gcloud beta container clusters create lokal oder in Cloud Shell aus, um einen GKE-Cluster zu erstellen, der als Dataproc-Cluster fungieren.

    1. Legen Sie Umgebungsvariablen fest.
      • Legen Sie dazu gke-cluster-name fest. Verwenden Sie nur alphanumerische Zeichen sowie "-".
      • Legen Sie den Cluster region fest, z. B. "us-central1".
      • Legen Sie den Cluster zone auf eine Zone in der ausgewählten Region fest, z. B. "us-central1-a".
      GKE_CLUSTER=gke-cluster-name \
        GCE_REGION=region
      
    2. Führen Sie den Befehl gcloud aus:
      • Legen Sie --scopes auf der "Cloud Platform" fest, um das Cluster-Dienstkonto als Berechtigungsmechanismus zu verwenden.
      • Legen Sie --workload-metadata-from-node auf "GCE_METADATA" fest, um die VM-Authentifizierung von Compute Engine zu verwenden.
      • Legen Sie --machine-type auf "n1-standard-4" fest. Es werden mindestens 4 CPUs empfohlen.
      gcloud beta container clusters create "${GKE_CLUSTER}" \
          --scopes=cloud-platform \
          --workload-metadata-from-node=GCE_METADATA \
          --machine-type=n1-standard-4 \
          --region="${GCE_REGION}"
      
  2. Dataproc-on-GKE-Cluster erstellen

    In diesem Schritt wird ein Dataproc-Cluster einem vorhandenen GKE-Cluster zugewiesen. Dabei werden Komponenten bereitgestellt, die den GKE-Cluster mit dem Dataproc-Dienst verknüpfen, um das Senden von Spark-Jobs zuzulassen.

    gcloud-Befehl

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

    1. Legen Sie Umgebungsvariablen fest.
      • Verwenden Sie nur alphanumerische Zeichen sowie "-" für dataproc-cluster-name.
      • Geben Sie eine Dataproc-on-GKE-version an, z. B. "1.4.27-beta".
      • Geben Sie ein Cloud Storage-bucket-URI for Staging-Artefakte an.

      DATAPROC_CLUSTER=dataproc-cluster-name \
        VERSION=version \
        BUCKET=bucket-name
      

    2. Führen Sie den Befehl gcloud aus:

      gcloud beta dataproc clusters create "${DATAPROC_CLUSTER}" \
          --gke-cluster="${GKE_CLUSTER}" \
          --region="${GCE_REGION}" \
          --image-version="${VERSION}" \
          --bucket="${BUCKET}"
      

      Hinweise:

      • Der obige Befehl generiert automatisch einen Namespace innerhalb des GKE-Clusters. Sie können den Namespace jedoch durch Hinzufügen des --gke-cluster-namespace-Arguments angeben.
      • Sie müssen den Dienstkonten von Dataproc Zugriff gewähren. Das projektspezifische Dienstkonto von Dataproc muss die IAM-Rolle Kubernetes Engine Admin haben. Dieses Dienstkonto hat das Format service-{project-number}@dataproc-accounts.iam.gserviceaccount.com.

        • Für die Version 1.4.23-beta müssen Sie auch dem Dataproc-Installationskonto service-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com über die IAM-Rolle Kubernetes Engine Admin Zugriff auf Ihren Kubernetes-Cluster gewähren.

  3. Spark-Job senden

    Spark-Jobs mit gcloud dataproc-Befehlen, der Dataproc Jobs API und der Cloud Console an den Dataproc-Cluster senden (siehe Job senden)

    Spark-Job- Beispiel:

    gcloud dataproc jobs submit spark \
        --cluster="${DATAPROC_CLUSTER}" \
        --region="${GCE_REGION}" \
        --class=org.apache.spark.examples.SparkPi \
        --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar
    

    Beispiel für einen PySpark-Job:

    gcloud dataproc jobs submit pyspark \
        --cluster="${DATAPROC_CLUSTER}" foo.py \
        --region="${GCE_REGION}"
    

    Beispiel für einen SparkR-Job:

    gcloud dataproc jobs submit spark-r \
        --cluster="${DATAPROC_CLUSTER}" file:/usr/lib/spark/examples/src/main/r/dataframe.R \
        --region="${GCE_REGION}"
    

Versions

Für das Erstellen eines Dataproc in GKE-Clusters ist eine Angabe der Versionsnummer erforderlich. Eine Versionsnummer entspricht einem bestimmten Paket erforderlicher und optionaler Komponenten, die auf dem Cluster im clusterspezifischen Namespace installiert werden. In der folgenden Tabelle sind die verfügbaren Versionen aufgeführt.

Version Komponenten Standard-Images Hinweise
1.4.23-beta Dataproc-Job-Agent, Spark-Operator Spark: gcr.io/cloud-dataproc/spark:1.4.23-deb9-beta
  • Unterstützt Spark-, PySpark- und SparkR-Jobtypen
  • Erfordert, dass dem service-51209575642@gcp-sa-saasmanagement.iam.gserviceaccount.com-Dienstkonto die IAM-Rolle Kubernetes Engine Admin zugewiesen wird
1.4.27-beta Dataproc-Job-Agent, Spark-Operator Spark: gcr.io/cloud-dataproc/spark:1.4.27-deb9-beta
  • Unterstützt Spark-, PySpark- und SparkR-Jobtypen

Dataproc-Docker-Image

Geeignete Dataproc-Docker-Images werden vom Cluster automatisch basierend auf der Version verwendet, die beim Erstellen des Dataproc-Clusters angegeben wurde. Die Standardkonfiguration des Images konfiguriert Spark mit dem Cloud Storage-Connector. Sie können die Standard-Images in der Versionsdokumentation anzeigen.

Logging

Jobtreiber- und Executor-Logs sind in Stackdriver Logging unter dem GKE-Cluster und dem Namespace verfügbar.

Fehlerbehebung

  • Aufgehängte Treiber Spark 2.4.1 und höher hat das bekannte Problem SPARK-27812, bei dem Treiber (insbesondere PySpark-Treiber) aufgrund eines Kubernetes-Client-Threads hängen bleiben. So umgehen Sie dieses Problem:

    1. Beenden Sie SparkSession oder SparkContext, indem Sie spark.stop() in der SparkSession oder sc.stop() im SparkContext aufrufen.
    2. Verwenden Sie ein Spark 2.4.0-basiertes Image wie gcr.io/dataproc-2f10d78d114f6aaec7646/spark/spark.

Bereinigen

Verwenden Sie die folgenden gcloud-Löschbefehle, um die zugewiesenen Ressourcen zu löschen. Um Fehler zu vermeiden, löschen Sie den Dataproc-Cluster, bevor Sie den GKE-Cluster löschen.

Dataproc-Clusterressourcen löschen

gcloud beta dataproc clusters delete "${DATAPROC_CLUSTER}" \
    --region=${GCE_REGION}

Löschen Sie den GKE-Cluster.

gcloud beta container clusters delete "${GKE_CLUSTER}"  \
  --region="${GCE_REGION}"