初始化動作

當您建立 Cloud Dataproc 叢集時,可以在執行檔或指令碼中指定初始化動作,讓 Cloud Dataproc 在叢集建立完成後,立即對該叢集的所有節點執行。初始化動作通常會設定工作依附元件 (例如安裝 Python 套件),讓您在工作執行時不必安裝依附元件,就能將該工作提交給叢集。

您可以在下列位置找到常用及其他的初始化動作指令碼範例:

重要注意事項

以下是建立或使用初始化動作時,應該特別注意的事項:

  • 叢集建立期間,初始化動作會在每個節點上執行。它們也會在對叢集進行調度資源自動調度資源時,在每個新增的節點上執行。如果您手動重新啟動一個叢集節點,初始化動作將在節點上再次執行。
  • 初始化動作會以 root 使用者的身分執行,因此您不需要使用 sudo
  • 您必須在初始化動作中使用絕對路徑
  • 初始化動作應使用工作行來指明指令碼的解讀方式 (例如 #!/bin/bash#!/usr/bin/python)。
  • 如果初始化動作以非零的結束代碼結尾,叢集建立作業將會回報「錯誤」狀態。如要對初始化動作進行偵錯,請透過 SSH 登入叢集的 VM 執行個體,然後檢查記錄。在您修正初始化動作的問題之後,請刪除該叢集,然後再重新建立。
  • 如果您只使用內部 IP 位址來建立 Cloud Dataproc 叢集,就無法利用初始化動作存取網際網路,除非您先設定路徑來引導流量通過 NATVPN 閘道。如果您無法存取網際網路,可以啟用私人 Google 存取權,並且將工作依附元件放置在 Cloud Storage 中;叢集節點可以利用內部 IP 從 Cloud Storage 下載依附元件。
  • 您可以使用 Cloud Dataproc 自訂映像檔來設定工作依附元件,而不必透過初始化動作來進行。

使用初始化動作

無論您建立叢集的方法是下列何者,都可以指定叢集的初始化動作:

Gcloud 指令

當您利用 gcloud dataproc clusters create 指令建立叢集時,請用 --initialization-actions 標記來指定初始化執行檔或指令碼的 Cloud Storage 位置 (URI)。以下是如何使用這個標記的語法,您只要執行 gcloud dataproc clusters create --help 就能在指令列看到這個語法。

gcloud dataproc clusters create cluster-name \
    --initialization-actions Cloud Storage URI(s) (gs://bucket/...) \
    --initialization-action-timeout timeout-value (default=10m) \
    ... other flags ...

選用的 --initialization-action-timeout 標記可用於指定初始化動作的逾時期限,預設的逾時期限為 10 分鐘。如果初始化執行檔或指令碼沒有在逾時期限結束前執行完畢,Cloud Dataproc 就會取消初始化動作。

REST API

請在 ClusterConfig.initializationActions 陣列中,指定一或多個 NodeInitializationAction 指令碼或執行檔,做為 clusters.create API 要求的一部分。

範例

POST /v1/projects/my-project-id/regions/global/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "default",
      "zoneUri": "us-central1-b"
    },
    "masterConfig": {
      "numInstances": 1,
      "machineTypeUri": "n1-standard-4",
      "diskConfig": {
        "bootDiskSizeGb": 500,
        "numLocalSsds": 0
      }
    },
    "workerConfig": {
      "numInstances": 2,
      "machineTypeUri": "n1-standard-4",
      "diskConfig": {
        "bootDiskSizeGb": 500,
        "numLocalSsds": 0
      }
    },
    "initializationActions": [
      {
        "executableFile": "gs://cloud-example-bucket/my-init-action.sh"
      }
    ]
  }
}

主控台

當您透過 GCP 主控台建立叢集時,可以在 Initialization actions 欄位中指定一或多個初始化動作。但您必須展開 [進階選項] 面板,才能看到這個欄位。
您可以在這份表單中輸入每個初始化動作的 Cloud Storage 位置。請按一下 [瀏覽] 開啟 GCP 主控台的 Cloud Storage 瀏覽器頁面,以選取初始化檔案。您必須分別為每個初始化檔案輸入資料 (按下 Enter 鍵即可新增項目)。

將引數傳送給初始化動作

Cloud Dataproc 會為在叢集中執行的執行個體設定特殊的中繼資料值。您可以設定自訂中繼資料,藉此指定將引數傳送給初始化動作的方式。

gcloud dataproc clusters create cluster-name \
    --initialization-actions Cloud Storage URI(s) (gs://bucket/...) \
    --metadata name1=value1,name2=value2... \
    ... other flags ...

初始化動作可以讀取中繼資料值,如下所示:

var1=$(/usr/share/google/get_metadata_value attributes/name1)

節點選取

如果您只想讓主要執行個體或工作站節點執行初始化動作,可以在執行檔或指令碼中新增簡單的節點選取邏輯。

ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
if [[ "${ROLE}" == 'Master' ]]; then
  ... master specific actions ...
else
  ... worker specific actions ...
fi

暫存二進位檔

常見的叢集初始化情況是將工作二進位檔暫存在叢集,這樣您就不必在每次提交工作時暫存二進位檔。舉例來說,假設您將下列初始化指令碼儲存在 Cloud Storage 值區位置 gs://my-bucket/download-job-jar.sh

#!/bin/bash
ROLE=$(/usr/share/google/get_metadata_value attributes/dataproc-role)
if [[ "${ROLE}" == 'Master' ]]; then
  gsutil cp gs://my-bucket/jobs/sessionalize-logs-1.0.jar home/username
fi

系統會將這個指令碼的位置傳送給 gcloud dataproc clusters create 指令:

gcloud dataproc clusters create my-dataproc-cluster \
    --initialization-actions gs://my-bucket/download-job-jar.sh

Cloud Dataproc 會對所有節點執行這個指令碼,而根據指令碼的節點選取邏輯,Cloud Dataproc 會把 Jar 檔下載到主要執行個體節點。然後,已提交的工作就能使用預先準備的 Jar 檔:

gcloud dataproc jobs submit hadoop \
    --cluster my-dataproc-cluster \
    --jar file:///home/username/sessionalize-logs-1.0.jar

初始化動作範例

您可以在公開的 Cloud Storage 值區 gs://dataproc-initialization-actions,以及 GitHub 存放區中,找到常用及其他的初始化動作指令碼範例。如要分享您的指令碼,請參閱 CONTRIBUTING.md 文件,然後提出提取要求。

記錄

系統會針對每個執行個體,將所有初始化動作執行結果的輸出內容記錄在 /var/log/dataproc-initialization-script-X.log,其中的 X 代表每個連續初始化動作指令碼的索引 (從零開始)。舉例來說,如果叢集有兩個初始化動作,系統會把輸出內容記錄在 /var/log/dataproc-initialization-script-0.log/var/log/dataproc-initialization-script-1.log

後續步驟

請探索下列初始化動作:

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Dataproc 說明文件
需要協助嗎?請前往我們的支援網頁