Dataproc-Treiberknotengruppen

Eine Dataproc-NodeGroup-Ressource ist eine Gruppe von Dataproc-Clusternodes, die eine zugewiesene Rolle ausführen. Auf dieser Seite wird die Treibernodegruppe beschrieben. Das ist eine Gruppe von Compute Engine-VMs, denen die Rolle Driver zugewiesen ist, um Jobtreiber im Dataproc-Cluster auszuführen.

Wann sollten Treibernodegruppen verwendet werden?

  • Verwenden Sie Driver-Knotengruppen nur, wenn Sie viele gleichzeitige Jobs in einem freigegebenen Cluster ausführen müssen.
  • Erhöhen Sie die Ressourcen des Masterknotens, bevor Sie Treiberknotengruppen verwenden, um Einschränkungen bei Treiberknotengruppen zu vermeiden.

So können Sie mit Driver-Knoten mehrere Jobs gleichzeitig ausführen

Dataproc startet für jeden Job einen Jobtreiberprozess auf einem Masterknoten des Dataproc-Clusters. Der Treiberprozess wiederum führt einen Anwendungstreiber wie spark-submit als untergeordneten Prozess aus. Die Anzahl der parallelen Jobs, die auf dem Master ausgeführt werden, ist jedoch durch die auf dem Masterknoten verfügbaren Ressourcen begrenzt. Da Dataproc-Masterknoten nicht skaliert werden können, kann ein Job fehlschlagen oder gedrosselt werden, wenn die Ressourcen des Masterknotens nicht ausreichen, um einen Job auszuführen.

Treiberknotengruppen sind spezielle Knotengruppen, die von YARN verwaltet werden. Die Job-Concurrency wird daher nicht durch Masterknotenressourcen begrenzt. In Clustern mit einer Treiberknotengruppe werden Anwendungstreiber auf Treiberknoten ausgeführt. Auf jedem Treibernknoten können mehrere Anwendungstreiber ausgeführt werden, wenn der Knoten über genügend Ressourcen verfügt.

Vorteile

Wenn Sie einen Dataproc-Cluster mit einer Driver-Knotengruppe verwenden, haben Sie folgende Möglichkeiten:

  • Horizontales Skalieren von Job-Treiberressourcen, um mehr parallele Jobs auszuführen
  • Treiberrssourcen separat von Worker-Ressourcen skalieren
  • Schnelleres Herunterskalieren auf Clustern mit Dataproc-Image-Version 2.0 und höher In diesen Clustern wird der App-Master in einem Spark-Treiber in einer Treiberknotengruppe ausgeführt (spark.yarn.unmanagedAM.enabled ist standardmäßig auf true festgelegt).
  • Start des Treibernodes anpassen Sie können {ROLE} == 'Driver' in einem Initialisierungsskript hinzufügen, damit das Skript Aktionen für eine Driver-Knotengruppe in der Knotenauswahl ausführt.

Beschränkungen

  • Knotengruppen werden in Dataproc-Workflow-Vorlagen nicht unterstützt.
  • Knotengruppencluster können nicht gestoppt, neu gestartet oder automatisch skaliert werden.
  • Der MapReduce-App-Master wird auf Worker-Knoten ausgeführt. Das Herunterskalieren von Worker-Knoten kann langsam sein, wenn Sie die schrittweise Außerbetriebnahme aktivieren.
  • Die Job-Concurrency wird durch das Clusterattribut dataproc:agent.process.threads.job.max beeinflusst. Wenn Sie beispielsweise drei Masterknoten haben und diese Eigenschaft auf den Standardwert 100 festgelegt ist, beträgt die maximale Job-Nebenläufigkeit auf Clusterebene 300.

Driver-Knotengruppe im Vergleich zum Spark-Clustermodus

Funktion Spark-Clustermodus Treibernotengruppe
Herunterskalierung von Worker-Knoten Langlebige Treiber werden auf denselben Worker-Knoten wie kurzlebige Container ausgeführt. Das Herunterskalieren von Workern mit Graceful Decommission ist daher langsam. Worker-Knoten werden schneller herunterskaliert, wenn Treiber auf Knotengruppen ausgeführt werden.
Gestreamte Treiberausgabe Erfordert die Suche in YARN-Logs, um den Knoten zu finden, auf dem der Treiber geplant wurde. Die Treiberausgabe wird in Cloud Storage gestreamt und ist nach Abschluss eines Jobs in der Google Cloud -Konsole und in der gcloud dataproc jobs wait-Befehlsausgabe sichtbar.

IAM-Berechtigungen für Fahrerknotengruppen

Die folgenden IAM-Berechtigungen sind mit den Aktionen im Zusammenhang mit Dataproc-Knotengruppen verknüpft.

Berechtigung Aktion
dataproc.nodeGroups.create Dataproc-Knotengruppen erstellen Wenn ein Nutzer dataproc.clusters.create im Projekt hat, wird diese Berechtigung erteilt.
dataproc.nodeGroups.get Details zu einer Dataproc-Knotengruppe abrufen.
dataproc.nodeGroups.update Größe einer Dataproc-Knotengruppe ändern

Vorgänge für Treibernotengruppen

Sie können die gcloud CLI und die Dataproc API verwenden, um eine Dataproc-Treibernotengruppe zu erstellen, abzurufen, in der Größe zu ändern, zu löschen und einen Job an sie zu senden.

Cluster mit Knotengruppe für Treiber erstellen

Eine Driver-Knotengruppe ist einem Dataproc-Cluster zugeordnet. Sie erstellen eine Knotengruppe im Rahmen der Erstellung eines Dataproc-Clusters. Sie können die gcloud CLI oder die Dataproc REST API verwenden, um einen Dataproc-Cluster mit einer Driver-Knotengruppe zu erstellen.

gcloud

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --driver-pool-size=SIZE \
    --driver-pool-id=NODE_GROUP_ID

Erforderliche Flags:

  • CLUSTER_NAME: Der Clustername, der innerhalb eines Projekts eindeutig sein muss. Der Name muss mit einem Kleinbuchstaben beginnen und darf bis zu 51 Kleinbuchstaben, Ziffern und Bindestriche enthalten. Sie darf nicht mit einem Bindestrich enden. Der Name eines gelöschten Clusters kann wiederverwendet werden.
  • REGION: Die Region, in der sich der Cluster befinden wird.
  • SIZE: Die Anzahl der Treibernodes in der Knotengruppe. Die Anzahl der benötigten Knoten hängt von der Joblast und dem Maschinentyp des Treiberpools ab. Die Anzahl der minimalen Driver-Gruppenknoten entspricht dem Gesamtspeicher oder den vCPUs, die von Job-Treibern benötigt werden, geteilt durch den Arbeitsspeicher oder die vCPUs der einzelnen Driver-Pools.
  • NODE_GROUP_ID: Optional und empfohlen. Die ID muss innerhalb des Clusters eindeutig sein. Verwenden Sie diese ID, um die Treibergruppe bei zukünftigen Vorgängen wie dem Ändern der Größe der Knotengruppe zu identifizieren. Wenn nicht angegeben, generiert Dataproc die ID der Knotengruppe.

Empfohlene Flag:

  • --enable-component-gateway: Fügen Sie dieses Flag hinzu, um das Dataproc Component Gateway zu aktivieren, das Zugriff auf die YARN-Weboberfläche bietet. Auf den Seiten „YARN UI Application“ und „Scheduler“ werden der Cluster- und Jobstatus, der Arbeitsspeicher der Anwendungs-Queue, die Kernkapazität und andere Messwerte angezeigt.

Zusätzliche Flags:Die folgenden optionalen driver-pool-Flags können dem Befehl gcloud dataproc clusters create hinzugefügt werden, um die Knotengruppe anzupassen.

Flag Standardwert
--driver-pool-id Eine String-Kennung, die vom Dienst generiert wird, wenn sie nicht durch das Flag festgelegt wird. Diese ID kann verwendet werden, um die Knotengruppe bei zukünftigen Knotenpoolvorgängen zu identifizieren, z. B. beim Ändern der Größe der Knotengruppe.
--driver-pool-machine-type n1-standard-4
--driver-pool-accelerator Kein Standardeinstellung Wenn Sie einen Beschleuniger angeben, ist der GPU-Typ erforderlich. Die Anzahl der GPUs ist optional.
--num-driver-pool-local-ssds Kein Standard
--driver-pool-local-ssd-interface Kein Standard
--driver-pool-boot-disk-type pd-standard
--driver-pool-boot-disk-size 1000 GB
--driver-pool-min-cpu-platform AUTOMATIC

REST

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

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: erforderlich. Google Cloud-Projekt-ID
  • REGION: erforderlich. Region des Dataproc-Clusters.
  • CLUSTER_NAME: erforderlich. Der Clustername, der innerhalb eines Projekts eindeutig sein muss. Der Name muss mit einem Kleinbuchstaben beginnen und darf bis zu 51 Kleinbuchstaben, Ziffern und Bindestriche enthalten. Er darf nicht mit einem Bindestrich enden. Der Name eines gelöschten Clusters kann wiederverwendet werden.
  • SIZE: erforderlich. Anzahl der Knoten in der Knotengruppe.
  • NODE_GROUP_ID: Optional und empfohlen. Die ID muss innerhalb des Clusters eindeutig sein. Verwenden Sie diese ID, um die Treibergruppe bei zukünftigen Vorgängen wie dem Ändern der Größe der Knotengruppe zu identifizieren. Wenn nicht angegeben, generiert Dataproc die ID der Knotengruppe.

Zusätzliche Optionen:Siehe NodeGroup.

HTTP-Methode und URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/clusters

JSON-Text anfordern:

{
  "clusterName":"CLUSTER_NAME",
  "config": {
    "softwareConfig": {
      "imageVersion":""
    },
    "endpointConfig": {
      "enableHttpPortAccess": true
    },
    "auxiliaryNodeGroups": [{
        "nodeGroup":{
            "roles":["DRIVER"],
            "nodeGroupConfig": {
                "numInstances": SIZE
             }
         },
        "nodeGroupId": "NODE_GROUP_ID"
    }]
  }
}

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

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

{
  "projectId": "PROJECT_ID",
  "clusterName": "CLUSTER_NAME",
  "config": {
    ...
    "auxiliaryNodeGroups": [
      {
        "nodeGroup": {
"name": "projects/PROJECT_ID/regions/REGION/clusters/CLUSTER_NAME/nodeGroups/NODE_GROUP_ID",
          "roles": [
            "DRIVER"
          ],
          "nodeGroupConfig": {
            "numInstances": SIZE,
            "instanceNames": [
              "CLUSTER_NAME-np-q1gp",
              "CLUSTER_NAME-np-xfc0"
            ],
            "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc-ci/global/images/dataproc-2-0-deb10-...-rc01",
            "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/REGION-a/machineTypes/n1-standard-4",
            "diskConfig": {
              "bootDiskSizeGb": 1000,
              "bootDiskType": "pd-standard"
            },
            "managedGroupConfig": {
              "instanceTemplateName": "dataproc-2a8224d2-...",
              "instanceGroupManagerName": "dataproc-2a8224d2-..."
            },
            "minCpuPlatform": "AUTOMATIC",
            "preemptibility": "NON_PREEMPTIBLE"
          }
        },
        "nodeGroupId": "NODE_GROUP_ID"
      }
    ]
  },
}

Clustermetadaten der Driver-Knotengruppe abrufen

Sie können den Befehl gcloud dataproc node-groups describe oder die Dataproc API verwenden, um Metadaten der Driver-Knotengruppe abzurufen.

gcloud

gcloud dataproc node-groups describe NODE_GROUP_ID \
    --cluster=CLUSTER_NAME \
    --region=REGION

Erforderliche Flags:

  • NODE_GROUP_ID: Sie können gcloud dataproc clusters describe CLUSTER_NAME ausführen, um die Knotengruppen-ID aufzulisten.
  • CLUSTER_NAME: Der Clustername.
  • REGION: Die Clusterregion.

REST

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: erforderlich. Google Cloud-Projekt-ID
  • REGION: erforderlich. Die Clusterregion.
  • CLUSTER_NAME: erforderlich. Der Name des Clusters.
  • NODE_GROUP_ID: erforderlich. Sie können gcloud dataproc clusters describe CLUSTER_NAME ausführen, um die Knoten-ID aufzulisten.

HTTP-Methode und URL:

GET https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/clusters/CLUSTER_NAMEnodeGroups/Node_GROUP_ID

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

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

{
  "name": "projects/PROJECT_ID/regions/REGION/clusters/CLUSTER_NAME/nodeGroups/NODE_GROUP_ID",
  "roles": [
    "DRIVER"
  ],
  "nodeGroupConfig": {
    "numInstances": 5,
    "imageUri": "https://www.googleapis.com/compute/v1/projects/cloud-dataproc-ci/global/images/dataproc-2-0-deb10-...-rc01",
    "machineTypeUri": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/REGION-a/machineTypes/n1-standard-4",
    "diskConfig": {
      "bootDiskSizeGb": 1000,
      "bootDiskType": "pd-standard"
    },
    "managedGroupConfig": {
      "instanceTemplateName": "dataproc-driver-pool-mcia3j656h2fy",
      "instanceGroupManagerName": "dataproc-driver-pool-mcia3j656h2fy"
    },
    "minCpuPlatform": "AUTOMATIC",
    "preemptibility": "NON_PREEMPTIBLE"
  }
}

Größe einer Fahrerknotengruppe ändern

Sie können den Befehl gcloud dataproc node-groups resize oder die Dataproc API verwenden, um einer Cluster-Treibernodegruppe Treibernodes hinzuzufügen oder daraus zu entfernen.

gcloud

gcloud dataproc node-groups resize NODE_GROUP_ID \
    --cluster=CLUSTER_NAME \
    --region=REGION \
    --size=SIZE

Erforderliche Flags:

  • NODE_GROUP_ID: Sie können gcloud dataproc clusters describe CLUSTER_NAME ausführen, um die Knotengruppen-ID aufzulisten.
  • CLUSTER_NAME: Der Clustername.
  • REGION: Die Clusterregion.
  • SIZE: Geben Sie die neue Anzahl der Treiberknoten in der Knotengruppe an.

Optionale Flag:

  • --graceful-decommission-timeout=TIMEOUT_DURATION: Wenn Sie eine Knotengruppe herunterskalieren, können Sie dieses Flag hinzufügen, um eine ordnungsgemäße Außerbetriebnahme TIMEOUT_DURATION anzugeben und so das sofortige Beenden von Job-Treibern zu vermeiden. Empfehlung:Legen Sie eine Zeitüberschreitungsdauer fest, die mindestens der Dauer des längsten Jobs entspricht, der in der Knotengruppe ausgeführt wird. Die Wiederherstellung fehlgeschlagener Treiber wird nicht unterstützt.

Beispiel: gcloud CLI-Befehl zum Hochskalieren von NodeGroup:

gcloud dataproc node-groups resize NODE_GROUP_ID \
    --cluster=CLUSTER_NAME \
    --region=REGION \
    --size=4

Beispiel: gcloud CLI-Befehl zum Herunterskalieren von NodeGroup:

gcloud dataproc node-groups resize NODE_GROUP_ID \
    --cluster=CLUSTER_NAME \
    --region=REGION \
    --size=1 \
    --graceful-decommission-timeout="100s"

REST

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: erforderlich. Google Cloud-Projekt-ID
  • REGION: erforderlich. Die Clusterregion.
  • NODE_GROUP_ID: erforderlich. Sie können gcloud dataproc clusters describe CLUSTER_NAME ausführen, um die ID der Knotengruppe aufzulisten.
  • SIZE: erforderlich. Neue Anzahl von Knoten in der Knotengruppe.
  • TIMEOUT_DURATION: Optional. Wenn Sie eine Knotengruppe herunterskalieren, können Sie dem Anfragetext ein gracefulDecommissionTimeout hinzufügen, um die sofortige Beendigung von Job-Treibern zu vermeiden. Empfehlung:Legen Sie eine Zeitüberschreitungsdauer fest, die mindestens der Dauer des längsten Jobs entspricht, der in der Knotengruppe ausgeführt wird. Die Wiederherstellung fehlgeschlagener Treiber wird nicht unterstützt.

    Beispiel:

    { "size": SIZE,
      "gracefulDecommissionTimeout": "TIMEOUT_DURATION"
    }
       

HTTP-Methode und URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/clusters/CLUSTER_NAME/nodeGroups/Node_GROUP_ID:resize

JSON-Text anfordern:

{
  "size": SIZE,
}

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

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

{
  "name": "projects/PROJECT_ID/regions/REGION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.dataproc.v1.NodeGroupOperationMetadata",
    "nodeGroupId": "NODE_GROUP_ID",
    "clusterUuid": "CLUSTER_UUID",
    "status": {
      "state": "PENDING",
      "innerState": "PENDING",
      "stateStartTime": "2022-12-01T23:34:53.064308Z"
    },
    "operationType": "RESIZE",
    "description": "Scale "up or "down" a GCE node pool to SIZE nodes."
  }
}

Treiberknotengruppencluster löschen

Wenn Sie einen Dataproc-Cluster löschen, werden auch die mit dem Cluster verknüpften Knotengruppen gelöscht.

Job senden

Sie können den Befehl gcloud dataproc jobs submit oder die Dataproc API verwenden, um einen Job an einen Cluster mit einer Driver-Knotengruppe zu senden.

gcloud

gcloud dataproc jobs submit JOB_COMMAND \
    --cluster=CLUSTER_NAME \
    --region=REGION \
    --driver-required-memory-mb=DRIVER_MEMORY \
    --driver-required-vcores=DRIVER_VCORES \
    DATAPROC_FLAGS \
    -- JOB_ARGS

Erforderliche Flags:

  • JOB_COMMAND: Geben Sie den Job-Befehl an.
  • CLUSTER_NAME: Der Clustername.
  • DRIVER_MEMORY: Menge des Arbeitsspeichers für Job-Treiber in MB, die zum Ausführen eines Jobs erforderlich ist (siehe Yarn Memory Controls).
  • DRIVER_VCORES: Die Anzahl der vCPUs, die zum Ausführen eines Jobs erforderlich sind.

Zusätzliche Flags:

  • DATAPROC_FLAGS: Fügen Sie alle zusätzlichen gcloud dataproc jobs submit-Flags hinzu, die sich auf den Jobtyp beziehen.
  • JOB_ARGS: Fügen Sie alle Argumente hinzu, die nach dem -- an den Job übergeben werden sollen.

Beispiele:Sie können die folgenden Beispiele in einer SSH-Terminalsitzung in einem Dataproc-Cluster mit einer Treiberknotengruppe ausführen.

  • Spark-Job zum Schätzen des Werts von pi:

    gcloud dataproc jobs submit spark \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --driver-required-memory-mb=2048 \
        --driver-required-vcores=2 \
        --class=org.apache.spark.examples.SparkPi \
        --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
        -- 1000
    
  • Spark-WordCount-Job:

    gcloud dataproc jobs submit spark \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --driver-required-memory-mb=2048 \
        --driver-required-vcores=2 \
        --class=org.apache.spark.examples.JavaWordCount \
        --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
        -- 'gs://apache-beam-samples/shakespeare/macbeth.txt'
    
  • PySpark-Job zum Schätzen des Werts von pi:

    gcloud dataproc jobs submit pyspark \
        file:///usr/lib/spark/examples/src/main/python/pi.py \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --driver-required-memory-mb=2048 \
        --driver-required-vcores=2 \
        -- 1000
    
  • Hadoop-MapReduce-Job TeraGen:

    gcloud dataproc jobs submit hadoop \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --driver-required-memory-mb=2048 \
        --driver-required-vcores=2 \
        --jar file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar \
        -- teragen 1000 \
        hdfs:///gen1/test
    

REST

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • PROJECT_ID: erforderlich. Google Cloud-Projekt-ID
  • REGION: erforderlich. Region des Dataproc-Clusters
  • CLUSTER_NAME: erforderlich. Der Clustername, der innerhalb eines Projekts eindeutig sein muss. Der Name muss mit einem Kleinbuchstaben beginnen und darf bis zu 51 Kleinbuchstaben, Ziffern und Bindestriche enthalten. Er darf nicht mit einem Bindestrich enden. Der Name eines gelöschten Clusters kann wiederverwendet werden.
  • DRIVER_MEMORY: erforderlich. Die Menge an Arbeitsspeicher für Jobtreiber in MB, die zum Ausführen eines Jobs erforderlich ist (siehe Yarn Memory Controls).
  • DRIVER_VCORES: erforderlich. Die Anzahl der vCPUs, die zum Ausführen eines Jobs erforderlich sind.
Zusätzliche Felder:Fügen Sie zusätzliche Felder hinzu, die sich auf den Jobtyp und die Jobargumente beziehen. Die Beispielanfrage enthält Felder, die zum Senden eines Spark-Jobs erforderlich sind, mit dem der Wert von pi geschätzt wird.

HTTP-Methode und URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/jobs:submit

JSON-Text anfordern:

{
  "job": {
    "placement": {
    "clusterName": "CLUSTER_NAME",
    },
    "driverSchedulingConfig": {
      "memoryMb]": DRIVER_MEMORY,
      "vcores": DRIVER_VCORES
    },
    "sparkJob": {
      "jarFileUris": "file:///usr/lib/spark/examples/jars/spark-examples.jar",
      "args": [
        "10000"
      ],
      "mainClass": "org.apache.spark.examples.SparkPi"
    }
  }
}


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

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

{
  "reference": {
    "projectId": "PROJECT_ID",
    "jobId": "job-id"
  },
  "placement": {
    "clusterName": "CLUSTER_NAME",
    "clusterUuid": "cluster-Uuid"
  },
  "sparkJob": {
    "mainClass": "org.apache.spark.examples.SparkPi",
    "args": [
      "1000"
    ],
    "jarFileUris": [
      "file:///usr/lib/spark/examples/jars/spark-examples.jar"
    ]
  },
  "status": {
    "state": "PENDING",
    "stateStartTime": "start-time"
  },
  "jobUuid": "job-Uuid"
}

Python

  1. Clientbibliothek installieren
  2. Standardanmeldedaten für Anwendungen einrichten
  3. Führen Sie den Code aus
    • Spark-Job zum Schätzen des Werts von Pi:
      
      import re
      
      from google.cloud import dataproc_v1 as dataproc
      from google.cloud import storage
      
      
      def submit_job(project_id: str, region: str, cluster_name: str) -> None:
          """Submits a Spark job to the specified Dataproc cluster with a driver node group and prints the output.
      
          Args:
              project_id: The Google Cloud project ID.
              region: The Dataproc region where the cluster is located.
              cluster_name: The name of the Dataproc cluster.
          """
          # Create the job client.
          with dataproc.JobControllerClient(
              client_options={"api_endpoint": f"{region}-dataproc.googleapis.com:443"}
          ) as job_client:
      
              driver_scheduling_config = dataproc.DriverSchedulingConfig(
                  memory_mb=2048,  # Example memory in MB
                  vcores=2,  # Example number of vcores
              )
      
              # Create the job config. 'main_jar_file_uri' can also be a
              # Google Cloud Storage URL.
              job = {
                  "placement": {"cluster_name": cluster_name},
                  "spark_job": {
                      "main_class": "org.apache.spark.examples.SparkPi",
                      "jar_file_uris": ["file:///usr/lib/spark/examples/jars/spark-examples.jar"],
                      "args": ["1000"],
                  },
                  "driver_scheduling_config": driver_scheduling_config
              }
      
              operation = job_client.submit_job_as_operation(
                  request={"project_id": project_id, "region": region, "job": job}
              )
      
              response = operation.result()
      
              # Dataproc job output gets saved to the Cloud Storage bucket
              # allocated to the job. Use a regex to obtain the bucket and blob info.
              matches = re.match("gs://(.*?)/(.*)", response.driver_output_resource_uri)
              if not matches:
                  print(f"Error: Could not parse driver output URI: {response.driver_output_resource_uri}")
                  raise ValueError
      
              output = (
                  storage.Client()
                  .get_bucket(matches.group(1))
                  .blob(f"{matches.group(2)}.000000000")
                  .download_as_bytes()
                  .decode("utf-8")
              )
      
              print(f"Job finished successfully: {output}")
      
    • PySpark-Job zum Ausgeben von „Hello World“:
      
      import re
      
      from google.cloud import dataproc_v1 as dataproc
      from google.cloud import storage
      
      
      def submit_job(project_id, region, cluster_name):
          """Submits a PySpark job to a Dataproc cluster with a driver node group.
      
          Args:
              project_id (str): The ID of the Google Cloud project.
              region (str): The region where the Dataproc cluster is located.
              cluster_name (str): The name of the Dataproc cluster.
          """
          # Create the job client.
          job_client = dataproc.JobControllerClient(
              client_options={"api_endpoint": f"{region}-dataproc.googleapis.com:443"}
          )
      
          driver_scheduling_config = dataproc.DriverSchedulingConfig(
              memory_mb=2048,  # Example memory in MB
              vcores=2,  # Example number of vcores
          )
      
          # Create the job config. The main Python file URI points to the script in
          # a Google Cloud Storage bucket.
          job = {
              "placement": {"cluster_name": cluster_name},
              "pyspark_job": {
                  "main_python_file_uri": "gs://dataproc-examples/pyspark/hello-world/hello-world.py"
              },
              "driver_scheduling_config": driver_scheduling_config,
          }
      
          operation = job_client.submit_job_as_operation(
              request={"project_id": project_id, "region": region, "job": job}
          )
          response = operation.result()
      
          # Dataproc job output gets saved to the Google Cloud Storage bucket
          # allocated to the job. Use a regex to obtain the bucket and blob info.
          matches = re.match("gs://(.*?)/(.*)", response.driver_output_resource_uri)
          if not matches:
              raise ValueError(
                  f"Unexpected driver output URI: {response.driver_output_resource_uri}"
              )
      
          output = (
              storage.Client()
              .get_bucket(matches.group(1))
              .blob(f"{matches.group(2)}.000000000")
              .download_as_bytes()
              .decode("utf-8")
          )
      
          print(f"Job finished successfully: {output}")
      
      

Joblogs ansehen

Wenn Sie den Jobstatus aufrufen und Probleme mit Jobs beheben möchten, können Sie die Treiberlogs mit der gcloud CLI oder der Google Cloud -Konsole aufrufen.

gcloud

Job-Treiberlogs werden während der Jobausführung in die gcloud CLI-Ausgabe oder dieGoogle Cloud -Konsole gestreamt. Treiberlogs werden im Staging-Bucket des Dataproc-Clusters in Cloud Storage gespeichert.

Führen Sie den folgenden gcloud CLI-Befehl aus, um den Speicherort der Treiberlogs in Cloud Storage aufzulisten:

gcloud dataproc jobs describe JOB_ID \
    --region=REGION
   

Der Cloud Storage-Speicherort von Treiberlogs wird in der Befehlsausgabe als driverOutputResourceUri im folgenden Format aufgeführt:

driverOutputResourceUri: gs://CLUSTER_STAGING_BUCKET/google-cloud-dataproc-metainfo/CLUSTER_UUID/jobs/JOB_ID

Konsole

So rufen Sie Clusterlogs für Knotengruppen auf:

  1. Aktivieren Sie das Logging.

  2. Sie können das folgende Log-Explorer-Abfrageformat verwenden, um Logs zu finden:

    resource.type="cloud_dataproc_cluster"
    resource.labels.project_id="PROJECT_ID"
    resource.labels.cluster_name="CLUSTER_NAME"
    log_name="projects/PROJECT_ID/logs/LOG_TYPE>"
    
    Ersetzen Sie Folgendes:

    • PROJECT_ID: Google Cloud Projekt-ID.
    • CLUSTER_NAME: Der Clustername.
    • LOG_TYPE:
      • Yarn-Nutzerprotokolle: yarn-userlogs
      • YARN-Ressourcenmanager-Logs: hadoop-yarn-resourcemanager
      • YARN-Knotenmanager-Logs: hadoop-yarn-nodemanager

Messwerte überwachen

Dataproc-Knotengruppen-Job-Treiber werden in einer untergeordneten dataproc-driverpool-driver-queue-Warteschlange unter einer dataproc-driverpool-Partition ausgeführt.

Messwerte für die Driver-Knotengruppe

In der folgenden Tabelle sind die zugehörigen Messwerte für Knotengruppentreiber aufgeführt, die standardmäßig für Treiberknotengruppen erfasst werden.

Messwert für die Knotengruppe des Treibers Beschreibung
yarn:ResourceManager:DriverPoolsQueueMetrics:AvailableMB Die Menge des verfügbaren Speichers in Mebibyte in dataproc-driverpool-driver-queue unter der Partition dataproc-driverpool.
yarn:ResourceManager:DriverPoolsQueueMetrics:PendingContainers Die Anzahl der ausstehenden (in die Warteschlange eingereihten) Container in dataproc-driverpool-driver-queue unter der Partition dataproc-driverpool.

Messwerte für untergeordnete Warteschlangen

In der folgenden Tabelle sind die Messwerte für untergeordnete Warteschlangen aufgeführt. Die Messwerte werden standardmäßig für Driver-Knotengruppen erfasst und können für die Erfassung in allen Dataproc-Clustern aktiviert werden.

Messwert für untergeordnete Warteschlange Beschreibung
yarn:ResourceManager:ChildQueueMetrics:AvailableMB Die Menge des verfügbaren Speichers in Mebibyte in dieser Warteschlange unter der Standardpartition.
yarn:ResourceManager:ChildQueueMetrics:PendingContainers Anzahl der ausstehenden (in der Warteschlange befindlichen) Container in dieser Warteschlange in der Standardpartition.
yarn:ResourceManager:ChildQueueMetrics:running_0 Die Anzahl der Jobs mit einer Laufzeit zwischen 0 und 60 Minuten in dieser Warteschlange unter allen Partitionen.
yarn:ResourceManager:ChildQueueMetrics:running_60 Die Anzahl der Jobs mit einer Laufzeit zwischen 60 und 300 Minuten in dieser Warteschlange unter allen Partitionen.
yarn:ResourceManager:ChildQueueMetrics:running_300 Die Anzahl der Jobs mit einer Laufzeit zwischen 300 und 1440 Minuten in dieser Warteschlange unter allen Partitionen.
yarn:ResourceManager:ChildQueueMetrics:running_1440 Die Anzahl der Jobs mit einer Laufzeit von mehr als 1440 Minuten in dieser Warteschlange für alle Partitionen.
yarn:ResourceManager:ChildQueueMetrics:AppsSubmitted Anzahl der in dieser Warteschlange eingereichten Anträge für alle Partitionen.

So rufen Sie YARN ChildQueueMetrics und DriverPoolsQueueMetrics in derGoogle Cloud Console auf:

  • Wählen Sie im Metrics Explorer die Ressourcen VM-Instanz → Benutzerdefiniert aus.

Jobtreiber für Knotengruppe debuggen

In diesem Abschnitt finden Sie Bedingungen und Fehler für Treiberknotengruppen sowie Empfehlungen zur Behebung der Bedingung oder des Fehlers.

Bedingungen

  • Bedingung:yarn:ResourceManager:DriverPoolsQueueMetrics:AvailableMB nähert sich 0. Dies weist darauf hin, dass im Cluster-Treiberpool nicht mehr genügend Speicherplatz verfügbar ist.

    Empfehlung: Erhöhen Sie die Anzahl der Fahrer.

  • Bedingung:yarn:ResourceManager:DriverPoolsQueueMetrics:PendingContainers ist größer als 0. Dies kann darauf hindeuten, dass der Arbeitsspeicher des Cluster-Treiberpools knapp wird und YARN Jobs in die Warteschlange stellt.

    Empfehlung: Erhöhen Sie die Anzahl der Fahrer.

Fehler

  • Fehler: Cluster <var>CLUSTER_NAME</var> requires driver scheduling config to run SPARK job because it contains a node pool with role DRIVER. Positive values are required for all driver scheduling config values.

    Empfehlung:Legen Sie driver-required-memory-mb und driver-required-vcores mit positiven Zahlen fest.

  • Fehler: Container exited with a non-zero exit code 137.

    Empfehlung:Erhöhen Sie driver-required-memory-mb für die Arbeitsspeichernutzung des Jobs.