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

Driver 節點群組與 Spark 叢集模式的比較

功能 Spark 叢集模式 驅動程式節點群組
縮減 worker 節點 長效驅動程式會在與短效容器相同的工作站節點上執行,因此使用優雅停用功能縮減工作站的規模時,速度會變慢。 在節點群組中執行驅動程式時,工作站節點會更快速縮減。
串流驅動程式輸出內容 需要在 YARN 記錄檔中搜尋,找出排程的驅動程式所在節點。 驅動程式輸出內容會串流至 Cloud Storage,並在工作完成後,顯示在 Google Cloud 主控台和 gcloud dataproc jobs wait 指令輸出內容中。

驅動程式節點群組身分與存取權管理權限

下列 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 應用程式和排程器頁面會顯示叢集和工作狀態、應用程式佇列記憶體、核心容量和其他指標。

其他標記:您可以將下列選用的 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 數量。
其他欄位:新增與工作類型和工作引數相關的其他欄位 (範例要求包含提交估算 pi 值的 Spark 工作所需的欄位)。

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

查看工作記錄檔

如要查看工作狀態並協助偵錯工作問題,您可以使用 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 分割區下 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 Instance」→「Custom」資源。

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

本節提供驅動程式節點群組的狀況和錯誤,並提供修正狀況或錯誤的建議。

條件

  • 狀況: 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 增加至工作記憶體用量。