總覽
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
控制台
如要查看節點群組叢集記錄,請按照下列步驟操作:
您可以使用下列 記錄檔探索工具查詢格式尋找記錄檔:
取代下列項目: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
- Yarn 使用者記錄:
監控指標
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 |
在所有分區中,這個佇列中執行時間介於 0 到 60 分鐘之間的工作數量。 |
yarn:ResourceManager:ChildQueueMetrics:running_60 |
在所有分區中,這個佇列中執行時間介於 60 到 300 分鐘之間的工作數量。 |
yarn:ResourceManager:ChildQueueMetrics:running_300 |
在所有分區中,這個佇列中執行時間介於 300 到 1440 分鐘之間的工作數量。 |
yarn:ResourceManager:ChildQueueMetrics:running_1440 |
在所有分區中,這個佇列中執行時間超過 1440 分鐘的工作數量。 |
yarn:ResourceManager:ChildQueueMetrics:AppsSubmitted |
所有分區中提交至此佇列的應用程式數量。 |
如要在Google Cloud 控制台中查看 YARN ChildQueueMetrics
和 DriverPoolsQueueMetrics
:

節點群組工作驅動程式偵錯
本節提供驅動程式節點群組的狀況和錯誤,並提供修正狀況或錯誤的建議。
條件
狀況:
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-mb
和driver-required-vcores
。錯誤:
Container exited with a non-zero exit code 137
。建議:將
driver-required-memory-mb
增加至工作記憶體用量。