Dataproc 驅動程式節點群組

Dataproc NodeGroup 資源是一組執行指派角色的 Dataproc 叢集節點。本頁說明驅動程式節點群組,也就是指已指派 Driver 角色的 Compute Engine VM 群組,目的是在 Dataproc 叢集上執行工作驅動程式。

何時使用驅動程式節點群組

  • 只有在共用叢集上需要同時執行多項工作時,才使用驅動程式節點群組。
  • 使用驅動程式節點群組前,請先增加主要節點資源,以免發生驅動程式節點群組限制

驅動程式節點如何協助您執行並行工作

Dataproc 會在 Dataproc 叢集主要節點上,為每個工作啟動工作驅動程式程序。驅動程式程序會以子項程序的形式,執行應用程式驅動程式 (例如 spark-submit)。不過,主要節點上執行的並行工作數量會受到主要節點可用資源的限制,而且由於 Dataproc 主要節點無法擴充,如果主要節點資源不足以執行工作,工作可能會失敗或遭到節流。

驅動程式節點群組是由 YARN 管理的特殊節點群組,因此工作並行數不會受到主要節點資源限制。在具有驅動程式節點群組的叢集中,應用程式驅動程式會在驅動程式節點上執行。如果節點有足夠的資源,每個驅動程式節點都可以執行多個應用程式驅動程式。

優點

使用含有驅動程式節點群組的 Dataproc 叢集,可讓您:

  • 水平調度工作驅動程式資源,執行更多並行工作
  • 與工作站資源分開調整驅動程式資源
  • 在 Dataproc 2.0 以上版本的映像檔叢集上,加快縮減作業的速度。在這些叢集上,應用程式主節點會在驅動程式節點群組的 Spark 驅動程式中執行 (預設會將 spark.yarn.unmanagedAM.enabled 設為 true)。
  • 自訂驅動程式節點啟動。您可以在初始化指令碼中加入 {ROLE} == 'Driver',讓指令碼在節點選取中,為驅動程式節點群組執行動作。

限制

  • Dataproc 工作流程範本不支援節點群組。
  • 節點群組叢集無法停止、重新啟動或自動調度資源。
  • MapReduce 應用程式主節點會在工作站節點上執行。如果啟用正常淘汰,工作站節點的縮減速度可能會較慢。
  • 工作並行數會受到 dataproc:agent.process.threads.job.max 叢集屬性影響。舉例來說,如果叢集有三個主要節點,且這個屬性設為預設值 100,則叢集層級的工作並行數上限為 300

與 Spark 叢集模式相比的驅動程式節點群組

功能 Spark 叢集模式 驅動程式節點群組
縮減工作站節點 長期執行的驅動程式與短期執行的容器在相同的工作站節點上執行,因此使用正常終止程序縮減工作站規模的速度較慢。 如果驅動程式在節點群組上執行,工作站節點會更快縮減。
串流驅動程式輸出內容 您必須在 YARN 記錄中搜尋,找出排定驅動程式的節點。 驅動程式輸出內容會串流至 Cloud Storage,工作完成後,您可以在 Google Cloud 控制台和 gcloud dataproc jobs wait 指令輸出內容中查看。

驅動程式節點群組 IAM 權限

下列 IAM 權限與 Dataproc 節點群組相關動作有關。

權限 動作
dataproc.nodeGroups.create 建立 Dataproc 節點群組。如果使用者在專案中擁有 dataproc.clusters.create,系統就會授予這項權限。
dataproc.nodeGroups.get 取得 Dataproc 節點群組的詳細資料。
dataproc.nodeGroups.update 調整 Dataproc 節點群組的大小。

驅動程式節點群組作業

您可以使用 gcloud CLI 和 Dataproc API,建立、取得、調整大小、刪除 Dataproc 驅動程式節點群組,以及將工作提交至該群組。

建立驅動程式節點群組叢集

一個驅動程式節點群組會與一個 Dataproc 叢集建立關聯。 建立節點群組是建立 Dataproc 叢集的其中一個步驟。您可以使用 gcloud CLI 或 Dataproc REST API,建立含有驅動程式節點群組的 Dataproc 叢集。

gcloud

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

必要標記:

  • CLUSTER_NAME:叢集名稱,在專案中不得重複。 名稱開頭須為小寫英文字母,最多可接 51 個小寫英文字母、數字和連字號,結尾不得為連字號。您可以重複使用已刪除叢集的名稱。
  • REGION:叢集所在的區域
  • SIZE:節點群組中的驅動程式節點數量。所需節點數量取決於工作負載和驅動程式集區機型。最少的驅動程式群組節點數,等於工作驅動程式所需的總記憶體或 vCPU 數,除以每個驅動程式集區的機器記憶體或 vCPU 數。
  • NODE_GROUP_ID:選用,但建議使用。ID 在叢集中不得重複。日後執行作業 (例如調整節點群組大小) 時,請使用這個 ID 識別驅動程式群組。如未指定,Dataproc 會產生節點群組 ID。

建議使用的旗標:

  • --enable-component-gateway:新增這個旗標即可啟用 Dataproc 元件閘道,並存取 YARN 網頁介面。YARN UI 的「Application」(應用程式) 和「Scheduler」(排程器) 頁面會顯示叢集和工作狀態、應用程式佇列記憶體、核心容量和其他指標。

其他標記:您可以將下列選用 driver-pool 標記新增至 gcloud dataproc clusters create 指令,自訂節點群組。

旗標 預設值
--driver-pool-id 如果未透過旗標設定,服務會產生字串 ID。執行節點集區作業 (例如調整節點群組大小) 時,可以使用這個 ID 識別節點群組。
--driver-pool-machine-type n1-standard-4
--driver-pool-accelerator 沒有預設值。指定加速器時,必須提供 GPU 類型;GPU 數量則為選填。
--num-driver-pool-local-ssds 無預設
--driver-pool-local-ssd-interface 無預設
--driver-pool-boot-disk-type pd-standard
--driver-pool-boot-disk-size 1000 GB
--driver-pool-min-cpu-platform AUTOMATIC

REST

完成 Dataproc API cluster.create 要求中的 AuxiliaryNodeGroup

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:必填。Google Cloud 專案 ID。
  • REGION:必填。Dataproc 叢集區域
  • CLUSTER_NAME:必填。叢集名稱,在專案中不得重複。名稱開頭須為小寫英文字母,最多可包含 51 個小寫英文字母、數字和連字號。結尾不得為連字號。刪除叢集後,即可再次使用該叢集的名稱。
  • SIZE:必填。節點群組中的節點數量。
  • NODE_GROUP_ID: 選用,但建議使用。叢集內的 ID 不得重複。在日後的作業中,您可以使用這個 ID 識別驅動程式群組,例如調整節點群組大小。如未指定,Dataproc 會產生節點群組 ID。

其他選項:請參閱「NodeGroup」。

HTTP 方法和網址:

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

JSON 要求主體:

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

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

{
  "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"
      }
    ]
  },
}

取得驅動程式節點群組叢集中繼資料

您可以使用 gcloud dataproc node-groups describe 指令或 Dataproc API,取得驅動程式節點群組中繼資料。

gcloud

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

必要標記:

  • NODE_GROUP_ID:您可以執行 gcloud dataproc clusters describe CLUSTER_NAME 列出節點群組 ID。
  • CLUSTER_NAME:叢集名稱。
  • REGION:叢集區域。

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:必填。Google Cloud 專案 ID。
  • REGION:必填。叢集區域。
  • CLUSTER_NAME:必填。叢集名稱。
  • NODE_GROUP_ID:必填。您可以執行 gcloud dataproc clusters describe CLUSTER_NAME 列出節點群組 ID。

HTTP 方法和網址:

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

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

{
  "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"
  }
}

調整驅動程式節點群組的大小

您可以使用 gcloud dataproc node-groups resize 指令或 Dataproc API,在叢集驅動程式節點群組中新增或移除驅動程式節點。

gcloud

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

必要標記:

  • NODE_GROUP_ID:您可以執行 gcloud dataproc clusters describe CLUSTER_NAME 列出節點群組 ID。
  • CLUSTER_NAME:叢集名稱。
  • REGION:叢集區域。
  • SIZE:指定節點群組中新的驅動程式節點數量。

選用旗標:

  • --graceful-decommission-timeout=TIMEOUT_DURATION: 縮減節點群組時,您可以新增這個標記來指定正常終止TIMEOUT_DURATION避免立即終止工作驅動程式。 建議:設定的逾時時間長度至少要等於節點群組上執行時間最長的工作 (系統不支援復原失敗的驅動程式)。

示例:gcloud CLI NodeGroup 擴大指令:

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

範例:gcloud CLI NodeGroup 縮減指令:

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

REST

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:必填。Google Cloud 專案 ID。
  • REGION:必填。叢集區域。
  • NODE_GROUP_ID:必填。您可以執行 gcloud dataproc clusters describe CLUSTER_NAME 列出節點群組 ID。
  • SIZE:必填。節點群組中的新節點數。
  • TIMEOUT_DURATION:選用。縮減節點群組時,您可以在要求主體中加入 gracefulDecommissionTimeout,避免工作驅動程式立即終止。建議:設定的逾時時間長度至少要等於節點群組上執行時間最長的工作 (系統不支援復原失敗的驅動程式)。

    範例:

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

HTTP 方法和網址:

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

JSON 要求主體:

{
  "size": SIZE,
}

如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

{
  "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."
  }
}

刪除驅動程式節點群組叢集

刪除 Dataproc 叢集時,系統會一併刪除與該叢集相關聯的節點群組。

提交工作

您可以使用 gcloud dataproc jobs submit 指令或 Dataproc API將工作提交至含有驅動程式節點群組的叢集

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

必要標記:

  • JOB_COMMAND:指定工作指令
  • CLUSTER_NAME:叢集名稱。
  • DRIVER_MEMORY:執行工作所需的作業驅動程式記憶體量 (以 MB 為單位,請參閱「Yarn 記憶體控制項」)。
  • DRIVER_VCORES:執行作業所需的 vCPU 數量。

其他旗標:

  • DATAPROC_FLAGS:新增與工作類型相關的任何其他 gcloud dataproc jobs submit 標記。
  • JOB_ARGS:新增任何引數 (在 -- 後方),傳遞至工作。

範例:您可以在 Dataproc 驅動程式節點群組叢集上,透過 SSH 終端機工作階段執行下列範例。

  • 估算 pi 值的 Spark 工作:

    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 字數統計工作:

    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'
    
  • 估算 pi 值的 PySpark 工作:

    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 TeraGen MapReduce 工作:

    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

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:必填。Google Cloud 專案 ID。
  • REGION:必填。Dataproc 叢集區域
  • CLUSTER_NAME:必填。叢集名稱,在專案中不得重複。名稱開頭須為小寫英文字母,最多可包含 51 個小寫英文字母、數字和連字號。結尾不得為連字號。刪除叢集後,即可再次使用該叢集的名稱。
  • DRIVER_MEMORY:必填。以 MB 為單位的工作驅動程式記憶體量,執行工作時需要此記憶體量 (請參閱「Yarn 記憶體控制項」)。
  • DRIVER_VCORES:必填。執行工作所需的 vCPU 數量。
其他欄位:新增與工作類型和工作引數相關的其他欄位 (範例要求包含提交 Spark 工作所需的欄位,該工作會估算 pi 的值)。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "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"
    }
  }
}


如要傳送要求,請展開以下其中一個選項:

您應該會收到如下的 JSON 回應:

{
  "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. 安裝用戶端程式庫
  2. 設定應用程式預設憑證
  3. 執行程式碼
    • Spark 工作,用於估算圓周率: <0x0A
      
      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 工作,用於列印「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}")
      
      

查看工作記錄檔

如要查看工作狀態及協助偵錯工作問題,可以使用 gcloud CLI 或 Google Cloud 控制台查看驅動程式記錄。

gcloud

執行工作時,工作驅動程式記錄會串流至 gcloud CLI 輸出或Google Cloud 主控台。驅動程式記錄會保留在 Cloud Storage 的 Dataproc 叢集暫存值區中。

執行下列 gcloud CLI 指令,列出 Cloud Storage 中驅動程式記錄的位置:

gcloud dataproc jobs describe JOB_ID \
    --region=REGION
   

驅動程式記錄的 Cloud Storage 位置會以 driverOutputResourceUri 形式列在指令輸出中,格式如下:

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

控制台

如要查看節點群組叢集記錄,請按照下列步驟操作:

  1. 啟用記錄功能

  2. 您可以使用下列記錄檔探索工具查詢格式來尋找記錄:

    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>"
    
    取代下列項目:

    • PROJECT_ID: Google Cloud 專案 ID。
    • CLUSTER_NAME:叢集名稱。
    • LOG_TYPE
      • Yarn 使用者記錄:yarn-userlogs
      • Yarn 資源管理員記錄:hadoop-yarn-resourcemanager
      • Yarn 節點管理工具記錄:hadoop-yarn-nodemanager

監控指標

Dataproc 節點群組工作驅動程式會在 dataproc-driverpool 分區下的 dataproc-driverpool-driver-queue 子佇列中執行。

駕駛人節點群組指標

下表列出相關聯的節點群組驅動程式指標,這些指標預設會為驅動程式節點群組收集。

駕駛人節點群組指標 說明
yarn:ResourceManager:DriverPoolsQueueMetrics:AvailableMB dataproc-driverpool-driver-queuedataproc-driverpool 分割區可用的記憶體量 (以 MiB 為單位)。
yarn:ResourceManager:DriverPoolsQueueMetrics:PendingContainers dataproc-driverpool 分區中 dataproc-driverpool-driver-queue 下的待處理 (已加入佇列) 容器數量。

子佇列指標

下表列出子佇列指標。系統預設會收集驅動程式節點群組的指標,您也可以在任何 Dataproc 叢集上啟用指標收集功能。

子佇列指標 說明
yarn:ResourceManager:ChildQueueMetrics:AvailableMB 預設分割區中,這個佇列可用的記憶體量 (以 MiB 為單位)。
yarn:ResourceManager:ChildQueueMetrics:PendingContainers 預設分割區中,這個佇列的待處理 (已加入佇列) 容器數量。
yarn:ResourceManager:ChildQueueMetrics:running_0 這個佇列中,所有分割區執行時間介於 060 分鐘的工作數量。
yarn:ResourceManager:ChildQueueMetrics:running_60 這個佇列中,所有分割區執行時間介於 60300 分鐘的工作數量。
yarn:ResourceManager:ChildQueueMetrics:running_300 這個佇列中,所有分割區執行時間介於 3001440 分鐘的工作數量。
yarn:ResourceManager:ChildQueueMetrics:running_1440 這個佇列中,所有分區執行時間超過 1440 分鐘的工作數量。
yarn:ResourceManager:ChildQueueMetrics:AppsSubmitted 所有分區中提交至這個佇列的應用程式數量。

如要在Google Cloud 控制台中查看 YARN ChildQueueMetricsDriverPoolsQueueMetrics

  • 在「指標多層檢視」中,選取「VM 執行個體」→「自訂」資源。

偵錯節點群組工作驅動程式

本節提供驅動程式節點群組條件和錯誤,以及修正條件或錯誤的建議。

條件

  • 狀況: yarn:ResourceManager:DriverPoolsQueueMetrics:AvailableMB 即將達到 0。這表示叢集驅動程式集區佇列的記憶體即將用盡。

    建議:擴大司機群組規模。

  • 條件: yarn:ResourceManager:DriverPoolsQueueMetrics:PendingContainers 大於 0。這可能表示叢集驅動程式集區佇列的記憶體不足,YARN 正在將工作排入佇列。

    建議:擴大司機群組規模。

錯誤

  • 錯誤: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.

    最佳化建議:driver-required-memory-mbdriver-required-vcores 設為正數。

  • 錯誤: Container exited with a non-zero exit code 137

    建議:driver-required-memory-mb 增加至工作記憶體用量。