Dataproc 驅動程式節點群組

Dataproc NodeGroup 資源是一組 Dataproc 叢集節點,用於執行指派的角色。本頁面為驅動程式節點群組的說明。這組節點是獲派 Driver 角色的 Compute Engine VM 群組,用於在 Dataproc 叢集執行工作驅動程式。

使用驅動程式節點群組的時機

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

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

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

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

優點

含有驅動程式節點群組的 Dataproc 叢集可以執行下列操作:

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

限制

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

比較驅動程式節點群組和 Spark 叢集模式

功能 Spark 叢集模式 驅動程式節點群組
縮減 worker 節點 長期運作的驅動程式和短期運作的容器都在相同的 worker 節點上執行,因此透過安全停用程序縮減 worker 的速度較慢。 驅動程式在節點群組執行,worker 節點縮減較快。
串流驅動程式輸出內容 必須搜尋 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」(排程器) 頁面會顯示叢集和工作狀態、應用程式佇列記憶體、核心資源和其他指標。

其他旗標:您可以在 gcloud dataproc clusters create 指令加入下列選用 driver-pool 旗標,自訂節點群組。

旗標 預設值
--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. 執行程式碼
    • 估算 pi 值的 Spark 工作:
      
      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}")
      
    • 顯示「hello world」的 PySpark 工作:
      
      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 叢集暫存 bucket

執行下列 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. 啟用 Logging

  2. 您可以使用下列 Logs Explorer 查詢格式來查找記錄:

    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 分區內,dataproc-driverpool-driver-queue 的可用記憶體量,以 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

  • 在「Metrics Explorer」依序選取「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