本文說明如何建立及執行使用一或多個外部儲存空間磁碟區的批次工作。外部儲存空間選項包括新的或現有的永久磁碟、新的本機 SSD、現有的 Cloud Storage bucket,以及現有的網路檔案系統 (NFS),例如 Filestore 檔案共用。
無論是否新增外部儲存空間磁碟區,工作的每個 Compute Engine VM 都有開機磁碟,可為工作的作業系統 (OS) 映像檔和指令提供儲存空間。如要瞭解如何設定工作的開機磁碟,請改為參閱「VM OS 環境總覽」。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
-
如要取得建立工作所需的權限,請要求管理員授予您下列 IAM 角色:
- 專案的批次工作編輯者 (
roles/batch.jobsEditor) - 工作服務帳戶 (預設為預設 Compute Engine 服務帳戶) 的服務帳戶使用者 (
roles/iam.serviceAccountUser) -
建立使用 Cloud Storage bucket 的工作:bucket 的 Storage 物件檢視者 (
roles/storage.objectViewer)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
- 專案的批次工作編輯者 (
建立使用儲存空間磁碟區的工作
工作可視需要使用下列一或多種外部儲存空間磁碟區。如要進一步瞭解所有類型的儲存空間磁碟區,以及各類型的差異和限制,請參閱 Compute Engine VM 儲存空間選項說明文件。
- 永久磁碟:可用區或區域性永久區塊儲存空間
- 本機 SSD:高效能的暫時性區塊儲存空間
- Cloud Storage bucket:經濟實惠的物件儲存庫
- 網路檔案系統 (NFS):遵循網路檔案系統通訊協定的分散式檔案系統,例如 Filestore 檔案共用區,這是託管於 Google Cloud的高效能 NFS
如要允許工作使用各個儲存空間磁碟區,請在工作定義中加入該磁碟區,並在可執行檔中指定其掛接路徑 (mountPath)。如要瞭解如何建立使用儲存空間磁碟區的工作,請參閱下列一或多個章節:
使用永久磁碟
使用永久磁碟的工作有下列限制:
所有永久磁碟:請參閱所有永久磁碟的限制。
新舊永久磁碟:工作中的每個永久磁碟可以是新磁碟 (在工作中定義並建立),也可以是現有磁碟 (已在專案中建立並在工作中指定)。如要使用永久磁碟,必須格式化並掛接至工作 VM,且 VM 必須與永久磁碟位於相同位置。Batch 會掛接您在工作中加入的所有永久磁碟,並格式化任何新的永久磁碟,但您必須格式化並卸載要用於工作的任何現有永久磁碟。
支援的位置選項、格式選項和掛接選項會因新的和現有的永久磁碟而異,如下表所示:
新的永久磁碟 現有永久磁碟 格式選項 永久磁碟會自動以
ext4檔案系統格式化。掛接選項 支援所有選項。
系統支援寫作以外的所有選項。這是因為多重寫入模式有所限制。
您必須先從連接的 VM 卸載永久磁碟,才能將其用於工作。
位置選項 您只能建立可用區永久磁碟。
您可以為工作選取任何位置。永久磁碟會在專案執行的可用區中建立。
您可以選取可用區和區域性永久磁碟。
如要使用磁碟,只能在包含工作所有永久磁碟的位置建立工作的 Compute Engine 資源。舉例來說,如果是可用區永久磁碟,工作位置必須是磁碟的可用區;如果是區域永久磁碟,工作位置必須是磁碟的區域,或者如果指定可用區,則必須是區域永久磁碟所在的一或兩個特定可用區。詳情請參閱「位置」。執行個體範本:如要在建立這項工作時使用 VM 執行個體範本,您必須在執行個體範本中,為這項工作附加任何永久磁碟。否則,如果您不想使用執行個體範本,則必須直接在工作定義中附加任何永久磁碟。
您可以使用Google Cloud 控制台、gcloud CLI、Batch API、C++、Go、Java、Node.js 或 Python,建立使用永久磁碟的工作。
控制台
下列範例使用 Google Cloud 控制台建立工作,執行指令碼來讀取位於 us-central1-a 可用區的現有可用區永久磁碟檔案。範例指令碼假設工作已有可用區永久磁碟,且根目錄中有名為 example.txt 的文字檔案。
選用:建立範例可用區永久磁碟
如要建立可用區永久磁碟,以便執行範例指令碼,請在建立工作前完成下列步驟:
將名為
example-disk的全新空白永久磁碟,連接至us-central1-a可用區中的 Linux VM,然後在 VM 執行指令,格式化及掛接磁碟。如需操作說明,請參閱「將永久磁碟新增至 VM」。請先不要中斷與 VM 的連線。
如要在永久磁碟上建立
example.txt,請在 VM 上執行下列指令:如要將目前使用的目錄變更為永久磁碟的根目錄,請輸入下列指令:
cd VM_MOUNT_PATH將 VM_MOUNT_PATH 替換為上一個步驟中,永久磁碟掛接至這個 VM 的目錄路徑,例如
/mnt/disks/example-disk。按下
Enter鍵。如要建立並定義名為
example.txt的檔案,請輸入下列指令:cat > example.txt按下
Enter鍵。輸入檔案內容。例如,輸入
Hello world!。如要儲存檔案,請按下
Ctrl+D(在 macOS 上則為Command+D)。
完成後,即可中斷與 VM 的連線。
從 VM 卸載永久磁碟。
如果不再需要 VM,可以刪除 VM,系統會自動卸載永久磁碟。
否則,請卸載永久磁碟。如需操作說明,請參閱「卸離和重新連接開機磁碟」,並卸離
example-disk永久磁碟,而非 VM 的開機磁碟。
建立使用現有可用區永久磁碟的工作
如要使用Google Cloud 控制台建立工作,並使用現有的可用區永久磁碟,請按照下列步驟操作:
前往 Google Cloud 控制台的「Job list」(工作清單) 頁面。
按一下「 建立」。「Create batch job」(建立批次工作) 頁面隨即開啟。左側窗格會選取「Job details」(工作詳細資料) 頁面。
設定「Job details」(工作詳細資料) 頁面:
選用:在「Job name」(工作名稱) 欄位中自訂工作名稱。
例如,輸入
example-disk-job。設定「Task details」(工作詳細資料) 部分:
在「New runnable」(新增可執行檔) 視窗中,新增至少一個指令碼或容器,以便執行這項工作。
舉例來說,如要執行指令碼,列印這項工作所用永久磁碟根目錄中名為
example.txt的檔案內容,請按照下列步驟操作:勾選「Script」核取方塊。系統會隨即顯示欄位。
在欄位中輸入下列指令碼:
echo "Here is the content of the example.txt file in the persistent disk." cat MOUNT_PATH/example.txt將 MOUNT_PATH 替換為您打算將永久磁碟掛接至這項工作 VM 的路徑,例如
/mnt/disks/example-disk。按一下「完成」。
在「Task count」(工作數量) 欄位中,輸入這項工作的任務數量。
例如,輸入
1(預設)。在「Parallelism」(平行處理) 欄位中,輸入要並行執行的任務數量。
例如,輸入
1(預設)。
設定「Resource specifications」(資源規格) 頁面:
在左側窗格中,按一下「Resource specifications」(資源規格)。「Resource specifications」(資源規格) 頁面隨即開啟。
選取這項工作的位置。如要使用現有的可用區永久磁碟,工作的 VM 必須位於同一個可用區。
在「Region」(區域) 欄位中選取區域。
舉例來說,如要使用範例可用區永久磁碟,請選取
us-central1 (Iowa)(預設)。在「Zone」(可用區) 欄位中,選取可用區。
例如,選取
us-central1-a (Iowa)。
設定「其他設定」頁面:
在左側窗格中,按一下「Additional configurations」(其他設定)。「其他設定」頁面隨即開啟。
針對要掛接至這項工作的每個現有可用區永久磁碟,執行下列操作:
在「Storage volume」(儲存空間磁碟區) 部分,按一下「Add new volume」(新增磁碟區)。「New volume」(新增磁碟區) 視窗隨即顯示。
在「New volume」(新增磁碟區) 視窗中,執行下列操作:
在「Volume type」(磁碟區類型) 部分,選取「Persistent disk」(永久磁碟) (預設)。
在「Disk」(磁碟) 清單中,選取要掛接至這項工作的現有可用區永久磁碟。磁碟必須與這項工作位於相同可用區。
舉例來說,選取您準備好的現有可用區永久磁碟,該磁碟位於
us-central1-a可用區,且包含example.txt檔案。選用:如要重新命名這個可用區永久磁碟,請按照下列步驟操作:
選取「自訂裝置名稱」。
在「Device name」(裝置名稱) 欄位中,輸入磁碟的新名稱。
在「Mount path」(掛接路徑) 欄位中,輸入這個永久磁碟的掛接路徑 (MOUNT_PATH):
例如,輸入以下內容:
/mnt/disks/EXISTING_PERSISTENT_DISK_NAME將 EXISTING_PERSISTENT_DISK_NAME 替換為磁碟名稱。如果您已重新命名可用區永久磁碟,請使用新名稱。
例如,將 EXISTING_PERSISTENT_DISK_NAME 替換為
example-disk。按一下「完成」。
選用:設定這項工作的其他欄位。
選用:如要查看工作設定,請按一下左側窗格中的「Preview」(預覽)。
點選「建立」。
「Job details」(工作詳細資料) 頁面會顯示您建立的工作。
gcloud
下列範例使用 gcloud CLI 建立工作,連接並掛接現有永久磁碟和新的永久磁碟。這項工作有 3 項任務,每項任務都會執行指令碼,在名為 output_task_TASK_INDEX.txt 的新永久磁碟中建立檔案,其中 TASK_INDEX 是每項任務的索引:0、1 和 2。
如要使用 gcloud CLI 建立使用永久磁碟的工作,請使用 gcloud batch jobs submit 指令。在工作的 JSON 設定檔中,於 instances 欄位指定永久磁碟,並在 volumes 欄位掛接永久磁碟。
建立 JSON 檔案。
如果您不打算使用執行個體範本執行這項工作,請建立包含下列內容的 JSON 檔案:
{ "allocationPolicy": { "instances": [ { "policy": { "disks": [ { "deviceName": "EXISTING_PERSISTENT_DISK_NAME", "existingDisk": "projects/PROJECT_ID/EXISTING_PERSISTENT_DISK_LOCATION/disks/EXISTING_PERSISTENT_DISK_NAME" }, { "newDisk": { "sizeGb": NEW_PERSISTENT_DISK_SIZE, "type": "NEW_PERSISTENT_DISK_TYPE" }, "deviceName": "NEW_PERSISTENT_DISK_NAME" } ] } } ], "location": { "allowedLocations": [ "EXISTING_PERSISTENT_DISK_LOCATION" ] } }, "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> /mnt/disks/NEW_PERSISTENT_DISK_NAME/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "deviceName": "NEW_PERSISTENT_DISK_NAME", "mountPath": "/mnt/disks/NEW_PERSISTENT_DISK_NAME", "mountOptions": "rw,async" }, { "deviceName": "EXISTING_PERSISTENT_DISK_NAME", "mountPath": "/mnt/disks/EXISTING_PERSISTENT_DISK_NAME" } ] }, "taskCount":3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
PROJECT_ID:專案的專案 ID。EXISTING_PERSISTENT_DISK_NAME:現有永久磁碟的名稱。EXISTING_PERSISTENT_DISK_LOCATION:現有永久磁碟的位置。對於每個現有的可用區永久磁碟,工作的位置必須是磁碟的可用區;對於每個現有的區域永久磁碟,工作的位置必須是磁碟的區域,或者如果指定可用區,則必須是區域永久磁碟所在的一或兩個特定可用區。進一步瞭解allowedLocations欄位。NEW_PERSISTENT_DISK_SIZE:新永久磁碟的大小,以 GB 為單位。允許的大小取決於永久磁碟的類型,但下限通常是 10 GB (10),上限通常是 64 TB (64000)。NEW_PERSISTENT_DISK_TYPE:新永久磁碟的磁碟類型,可以是pd-standard、pd-balanced、pd-ssd或pd-extreme。非開機永久磁碟的預設磁碟類型為pd-standard。NEW_PERSISTENT_DISK_NAME:新永久磁碟的名稱。
如果您使用 VM 執行個體範本執行這項工作,請按照先前所示建立 JSON 檔案,但將
instances欄位替換為下列內容:"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ],其中
INSTANCE_TEMPLATE_NAME是這項工作的執行個體範本名稱。如果工作使用永久磁碟,這個執行個體範本必須定義並附加工作要使用的永久磁碟。在本範例中,範本必須定義並連接名為NEW_PERSISTENT_DISK_NAME的新永久磁碟,以及連接名為EXISTING_PERSISTENT_DISK_NAME的現有永久磁碟。
執行下列指令:
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE更改下列內容:
JOB_NAME:工作名稱。LOCATION:工作的位置。JSON_CONFIGURATION_FILE:JSON 檔案的路徑,其中包含工作的設定詳細資料。
API
下列範例使用 Batch API 建立工作,該工作會連接並掛接現有永久磁碟和新的永久磁碟。這項工作有 3 項任務,每項任務都會執行指令碼,在新的永久磁碟中建立名為 output_task_TASK_INDEX.txt 的檔案,其中 TASK_INDEX 是每項任務的索引:0、1 和 2。
如要使用 Batch API 建立採用永久磁碟的工作,請使用 jobs.create 方法。在要求中,請在 instances 欄位指定永久磁碟,並在 volumes 欄位掛接永久磁碟。
如果您並非使用執行個體範本執行這項工作,請提出下列要求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME { "allocationPolicy": { "instances": [ { "policy": { "disks": [ { "deviceName": "EXISTING_PERSISTENT_DISK_NAME", "existingDisk": "projects/PROJECT_ID/EXISTING_PERSISTENT_DISK_LOCATION/disks/EXISTING_PERSISTENT_DISK_NAME" }, { "newDisk": { "sizeGb": NEW_PERSISTENT_DISK_SIZE, "type": "NEW_PERSISTENT_DISK_TYPE" }, "deviceName": "NEW_PERSISTENT_DISK_NAME" } ] } } ], "location": { "allowedLocations": [ "EXISTING_PERSISTENT_DISK_LOCATION" ] } }, "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> /mnt/disks/NEW_PERSISTENT_DISK_NAME/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "deviceName": "NEW_PERSISTENT_DISK_NAME", "mountPath": "/mnt/disks/NEW_PERSISTENT_DISK_NAME", "mountOptions": "rw,async" }, { "deviceName": "EXISTING_PERSISTENT_DISK_NAME", "mountPath": "/mnt/disks/EXISTING_PERSISTENT_DISK_NAME" } ] }, "taskCount":3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
PROJECT_ID:專案的專案 ID。LOCATION:工作的位置。JOB_NAME:工作名稱。EXISTING_PERSISTENT_DISK_NAME:現有永久磁碟的名稱。EXISTING_PERSISTENT_DISK_LOCATION:現有永久磁碟的位置。對於每個現有的可用區永久磁碟,工作的位置必須是磁碟的可用區;對於每個現有的區域永久磁碟,工作的位置必須是磁碟的區域,或者如果指定可用區,則必須是區域永久磁碟所在的一或兩個特定可用區。進一步瞭解allowedLocations欄位。NEW_PERSISTENT_DISK_SIZE:新永久磁碟的大小,以 GB 為單位。允許的大小取決於永久磁碟的類型,但下限通常是 10 GB (10),上限通常是 64 TB (64000)。NEW_PERSISTENT_DISK_TYPE:新永久磁碟的磁碟類型,可以是pd-standard、pd-balanced、pd-ssd或pd-extreme。非開機永久磁碟的預設磁碟類型為pd-standard。NEW_PERSISTENT_DISK_NAME:新永久磁碟的名稱。
如果您使用 VM 執行個體範本執行這項工作,請按照先前所示建立 JSON 檔案,但將
instances欄位替換為下列內容:"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ], ...其中
INSTANCE_TEMPLATE_NAME是這項工作的執行個體範本名稱。如果工作使用永久磁碟,這個執行個體範本必須定義並附加工作要使用的永久磁碟。在本範例中,範本必須定義並連接名為NEW_PERSISTENT_DISK_NAME的新永久磁碟,以及連接名為EXISTING_PERSISTENT_DISK_NAME的現有永久磁碟。
C++
如要使用 C++ 適用的 Cloud 用戶端程式庫,建立使用新或現有永久磁碟的批次工作,請使用 CreateJob 函式,並加入下列內容:
- 如要將永久磁碟附加至工作的 VM,請加入下列其中一項:
- 如果這項工作未使用 VM 執行個體範本,請使用
set_remote_path方法。 - 如果您使用 VM 執行個體範本執行這項工作,請使用
set_instance_template方法。
- 如果這項工作未使用 VM 執行個體範本,請使用
- 如要將永久磁碟掛接至工作,請使用
volumes欄位,以及deviceName和mountPath欄位。如果是新的永久磁碟,也請使用mountOptions欄位啟用寫入功能。
如需類似用途的程式碼範例,請參閱「使用 Cloud Storage bucket」。
Go
如要使用 Go 適用的 Cloud 用戶端程式庫,建立使用全新或現有永久磁碟的批次工作,請使用 CreateJob 函式,並加入下列內容:
- 如要將永久磁碟附加至工作的 VM,請加入下列其中一項:
- 如果這項工作未使用 VM 執行個體範本,請加入
AllocationPolicy_AttachedDisk類型。 - 如果您在這項工作中使用 VM 執行個體範本,請加入
AllocationPolicy_InstancePolicyOrTemplate_InstanceTemplate類型。
- 如果這項工作未使用 VM 執行個體範本,請加入
- 如要將永久磁碟掛接至工作,請使用
Volume類型、Volume_DeviceName類型和MountPath欄位。如果是新的永久磁碟,也請使用MountOptions欄位啟用寫入功能。
Java
如要使用 Java 適用的 Cloud 用戶端程式庫,建立使用全新或現有永久磁碟的批次工作,請使用 CreateJobRequest 類別,並加入下列內容:
- 如要將永久磁碟附加至工作的 VM,請加入下列其中一項:
- 如果這項工作未使用 VM 執行個體範本,請加入
setDisks方法。 - 如果您使用 VM 執行個體範本執行這項工作,請加入
setInstanceTemplate方法。
- 如果這項工作未使用 VM 執行個體範本,請加入
- 如要將永久磁碟掛接至工作,請使用
Volume類別、setDeviceName方法和setMountPath方法。如果是新的永久磁碟,也請使用setMountOptions方法啟用寫入功能。
舉例來說,請使用下列程式碼範例:
Node.js
如要使用 Node.js 適用的 Cloud 用戶端程式庫,建立使用新或現有永久磁碟的批次工作,請使用 createJob 方法,並加入下列內容:
- 如要將永久磁碟附加至工作的 VM,請加入下列其中一項:
- 如果這項工作未使用 VM 執行個體範本,請加入
AllocationPolicy.AttachedDisk類別。 - 如果您使用 VM 執行個體範本執行這項工作,請加入
instanceTemplate屬性。
- 如果這項工作未使用 VM 執行個體範本,請加入
- 如要將永久磁碟掛接至工作,請使用
Volume類別,並搭配deviceName屬性和mountPath屬性。如果是新的永久磁碟,也請使用mountOptions屬性啟用寫入功能。
Python
如要使用 Python 適用的 Cloud 用戶端程式庫,建立使用新或現有永久磁碟的批次工作,請使用 CreateJob 函式,並加入下列內容:
- 如要將永久磁碟附加至工作的 VM,請加入下列其中一項:
- 如果這項工作未使用 VM 執行個體範本,請加入
AttachedDisk類別。 - 如果您使用 VM 執行個體範本執行這項工作,請加入
instance_template屬性。
- 如果這項工作未使用 VM 執行個體範本,請加入
- 如要將永久磁碟掛接至工作,請使用
Volume類別,並搭配device_name屬性和mount_path屬性。如果是新的永久磁碟,也請使用mount_options屬性啟用寫入功能。
舉例來說,請使用下列程式碼範例:
使用本機 SSD
使用本機 SSD 的工作有下列限制:
- 所有本機 SSD:請參閱所有本機 SSD 的限制。
- 執行個體範本:如要在建立這項工作時指定 VM 執行個體範本,您必須在執行個體範本中附加這項工作的任何永久磁碟。否則,如果您不想使用執行個體範本,則必須直接在工作定義中附加任何永久磁碟。
您可以使用 gcloud CLI、Batch API、Java 或 Python,建立使用本機 SSD 的工作。以下範例說明如何建立工作,以建立、附加及掛接本機 SSD。這項工作也有 3 項任務,每項任務都會執行指令碼,在本機 SSD 中建立名為 output_task_TASK_INDEX.txt 的檔案,其中 TASK_INDEX 是每項任務的索引:0、1 和 2。
gcloud
如要使用 gcloud CLI 建立採用本機 SSD 的工作,請使用 gcloud batch jobs submit 指令。在工作的 JSON 設定檔中,於 instances 欄位建立並附加本機 SSD,並在 volumes 欄位掛接本機 SSD。
建立 JSON 檔案。
如果您不打算使用執行個體範本執行這項工作,請建立包含下列內容的 JSON 檔案:
{ "allocationPolicy": { "instances": [ { "policy": { "machineType": MACHINE_TYPE, "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ] } } ] }, "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> /mnt/disks/LOCAL_SSD_NAME/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "deviceName": "LOCAL_SSD_NAME", "mountPath": "/mnt/disks/LOCAL_SSD_NAME", "mountOptions": "rw,async" } ] }, "taskCount":3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
MACHINE_TYPE:工作 VM 的機器類型,可以是預先定義或自訂。本機 SSD 的允許數量取決於工作 VM 的機型。LOCAL_SSD_NAME:為這項工作建立的本機 SSD 名稱。LOCAL_SSD_SIZE:所有本機 SSD 的大小,以 GB 為單位。每個本機 SSD 為 375 GB,因此這個值必須是375GB 的倍數。舉例來說,如果是 2 個本機 SSD,請將這個值設為750GB。
如果您使用 VM 執行個體範本執行這項工作,請按照先前所示建立 JSON 檔案,但將
instances欄位替換為下列內容:"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ],其中
INSTANCE_TEMPLATE_NAME是這項工作的執行個體範本名稱。如果工作使用本機 SSD,這個執行個體範本必須定義並附加要讓工作使用的本機 SSD。在這個範例中,範本必須定義並附加名為LOCAL_SSD_NAME的本機 SSD。
執行下列指令:
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE更改下列內容:
JOB_NAME:工作名稱。LOCATION:工作的位置。JSON_CONFIGURATION_FILE:JSON 檔案的路徑,其中包含工作的設定詳細資料。
API
如要使用 Batch API 建立使用本機 SSD 的工作,請使用 jobs.create 方法。在要求中,於 instances 欄位建立並連接本機 SSD,並在 volumes 欄位掛接本機 SSD。
如果您並非使用執行個體範本執行這項工作,請提出下列要求:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME { "allocationPolicy": { "instances": [ { "policy": { "machineType": MACHINE_TYPE, "disks": [ { "newDisk": { "sizeGb": LOCAL_SSD_SIZE, "type": "local-ssd" }, "deviceName": "LOCAL_SSD_NAME" } ] } } ] }, "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> /mnt/disks/LOCAL_SSD_NAME/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "deviceName": "LOCAL_SSD_NAME", "mountPath": "/mnt/disks/LOCAL_SSD_NAME", "mountOptions": "rw,async" } ] }, "taskCount":3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
PROJECT_ID:專案的專案 ID。LOCATION:工作的位置。JOB_NAME:工作名稱。MACHINE_TYPE:工作 VM 的機器類型,可以是預先定義或自訂。本機 SSD 的允許數量取決於工作 VM 的機型。LOCAL_SSD_NAME:為這項工作建立的本機 SSD 名稱。LOCAL_SSD_SIZE:所有本機 SSD 的大小 (以 GB 為單位)。每個本機 SSD 為 375 GB,因此這個值必須是375GB 的倍數。舉例來說,如果是 2 個本機 SSD,請將這個值設為750GB。
如果您使用 VM 執行個體範本執行這項工作,請按照先前所示建立 JSON 檔案,但將
instances欄位替換為下列內容:"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ], ...其中
INSTANCE_TEMPLATE_NAME是這項工作的執行個體範本名稱。如果工作使用本機 SSD,這個執行個體範本必須定義並附加要讓工作使用的本機 SSD。在這個範例中,範本必須定義並附加名為LOCAL_SSD_NAME的本機 SSD。
Go
Java
Node.js
Python
使用 Cloud Storage bucket
如要建立使用現有 Cloud Storage bucket 的工作,請選取下列其中一種方法:
- 建議做法:在工作定義中指定 bucket,直接將 bucket 掛接至工作的 VM,如本節所示。工作執行時,系統會使用 Cloud Storage FUSE,自動將 bucket 掛接至工作的 VM。
- 使用 gcloud CLI 或 Cloud Storage API 的用戶端程式庫,建立工作,並加入直接存取 Cloud Storage bucket 的任務。如要瞭解如何直接從 VM 存取 Cloud Storage bucket,請參閱 Compute Engine 說明文件,瞭解如何寫入及讀取 Cloud Storage bucket 中的資料。
建立使用 bucket 的工作前,請先建立 bucket 或找出既有 bucket。詳情請參閱「建立 bucket」和「列出 bucket」。
您可以使用Google Cloud 控制台、gcloud CLI、Batch API、C++、Go、Java、Node.js 或 Python,建立使用 Cloud Storage bucket 的工作。
以下範例說明如何建立掛接 Cloud Storage bucket 的工作。這項工作也有 3 項任務,每項任務都會執行指令碼,在 bucket 中建立名為 output_task_TASK_INDEX.txt 的檔案,其中 TASK_INDEX 是每項任務的索引:0、1 和 2。
控制台
如要使用Google Cloud 控制台建立使用 Cloud Storage bucket 的工作,請按照下列步驟操作:
前往 Google Cloud 控制台的「Job list」(工作清單) 頁面。
按一下「 建立」。「Create batch job」(建立批次工作) 頁面隨即開啟。左側窗格會選取「Job details」(工作詳細資料) 頁面。
設定「Job details」(工作詳細資料) 頁面:
選用:在「Job name」(工作名稱) 欄位中自訂工作名稱。
例如,輸入
example-bucket-job。設定「Task details」(工作詳細資料) 部分:
在「New runnable」(新增可執行檔) 視窗中,新增至少一個指令碼或容器,以便執行這項工作。
例如,請執行下列操作:
勾選「Script」核取方塊。系統會隨即顯示欄位。
在欄位中輸入下列指令碼:
echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt將 MOUNT_PATH 替換為這項工作的可執行檔用來存取現有 Cloud Storage bucket 的掛接路徑。路徑開頭必須是
/mnt/disks/,後面接著您選擇的目錄或路徑。舉例來說,如要以名為my-bucket的目錄代表這個 bucket,請將掛接路徑設為/mnt/disks/my-bucket。按一下「完成」。
在「Task count」(工作數量) 欄位中,輸入這項工作的任務數量。
例如,輸入
3。在「Parallelism」(平行處理) 欄位中,輸入要並行執行的任務數量。
例如,輸入
1(預設)。
設定「其他設定」頁面:
在左側窗格中,按一下「Additional configurations」(其他設定)。「其他設定」頁面隨即開啟。
針對要掛接至這項工作的每個 Cloud Storage bucket,執行下列操作:
在「Storage volume」(儲存空間磁碟區) 部分,按一下「Add new volume」(新增磁碟區)。「New volume」(新增磁碟區) 視窗隨即顯示。
在「New volume」(新增磁碟區) 視窗中,執行下列操作:
在「Volume type」(磁碟區類型) 區段,選取「Cloud Storage bucket」。
在「Storage Bucket name」(Storage bucket 名稱) 欄位中,輸入現有 bucket 的名稱。
例如,輸入您在這項工作的 runnable 中指定的 bucket。
在「Mount path」(掛接路徑) 欄位中,輸入您在 runnable 中指定的 bucket 掛接路徑 (MOUNT_PATH)。
按一下「完成」。
選用:設定這項工作的其他欄位。
選用:如要查看工作設定,請按一下左側窗格中的「Preview」(預覽)。
點選「建立」。
「Job details」(工作詳細資料) 頁面會顯示您建立的工作。
gcloud
如要使用 gcloud CLI 建立使用 Cloud Storage bucket 的工作,請使用 gcloud batch jobs submit 指令。在工作的 JSON 設定檔中,將 bucket 掛接至 volumes 欄位。
舉例來說,如要建立將檔案輸出至 Cloud Storage 的工作,請按照下列步驟操作:
建立含有下列內容的 JSON 檔案:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "gcs": { "remotePath": "BUCKET_PATH" }, "mountPath": "MOUNT_PATH" } ] }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
BUCKET_PATH:要讓這項工作存取的 bucket 目錄路徑,開頭必須是 bucket 名稱。舉例來說,如果 bucket 名稱為BUCKET_NAME,則路徑BUCKET_NAME代表 bucket 的根目錄,路徑BUCKET_NAME/subdirectory則代表subdirectory子目錄。MOUNT_PATH:工作可執行檔用來存取這個 bucket 的掛接路徑。路徑開頭必須是/mnt/disks/,後面接著您選擇的目錄或路徑。舉例來說,如要以名為my-bucket的目錄代表這個 bucket,請將掛接路徑設為/mnt/disks/my-bucket。
執行下列指令:
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE更改下列內容:
JOB_NAME:工作名稱。LOCATION:工作的位置。JSON_CONFIGURATION_FILE:JSON 檔案的路徑,其中包含工作的設定詳細資料。
API
如要使用 Batch API 建立使用 Cloud Storage bucket 的工作,請使用 jobs.create 方法,並在 volumes 欄位中掛接 bucket。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt"
}
}
],
"volumes": [
{
"gcs": {
"remotePath": "BUCKET_PATH"
},
"mountPath": "MOUNT_PATH"
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
更改下列內容:
PROJECT_ID:專案的專案 ID。LOCATION:工作的位置。JOB_NAME:工作名稱。BUCKET_PATH:您要讓這項工作存取的 bucket 目錄路徑,開頭必須是 bucket 名稱。舉例來說,如果值區名稱為BUCKET_NAME,則路徑BUCKET_NAME代表值區的根目錄,路徑BUCKET_NAME/subdirectory則代表subdirectory子目錄。MOUNT_PATH:工作可執行檔用來存取這個 bucket 的掛接路徑。路徑開頭必須是/mnt/disks/,後面接著您選擇的目錄或路徑。舉例來說,如要以名為my-bucket的目錄代表這個 bucket,請將掛接路徑設為/mnt/disks/my-bucket。
C++
C++
詳情請參閱 Batch C++ API 參考文件。
如要向 Batch 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
Go
詳情請參閱 Batch Go API 參考文件。
如要向 Batch 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Java
Java
詳情請參閱 Batch Java API 參考文件。
如要向 Batch 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
Node.js
詳情請參閱 Batch Node.js API 參考文件。
如要向 Batch 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
Python
詳情請參閱 Batch Python API 參考文件。
如要向 Batch 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
使用網路檔案系統
您可以使用 Google Cloud 控制台、gcloud CLI 或 Batch API,建立使用現有網路檔案系統 (NFS) 的工作,例如 Filestore 檔案共用區。
建立使用 NFS 的工作前,請確認網路防火牆已正確設定,允許工作 VM 與 NFS 之間的流量。詳情請參閱「設定 Filestore 的防火牆規則」。
以下範例說明如何建立指定及掛接 NFS 的工作。這項工作還有 3 項任務,每項任務都會執行指令碼,在 NFS 中建立名為 output_task_TASK_INDEX.txt 的檔案,其中 TASK_INDEX 是每項任務的索引:0、1 和 2。
控制台
如要使用 Google Cloud 控制台建立使用 NFS 的工作,請按照下列步驟操作:
前往 Google Cloud 控制台的「Job list」(工作清單) 頁面。
按一下「 建立」。「Create batch job」(建立批次工作) 頁面隨即開啟。左側窗格會選取「Job details」(工作詳細資料) 頁面。
設定「Job details」(工作詳細資料) 頁面:
選用:在「Job name」(工作名稱) 欄位中自訂工作名稱。
例如,輸入
example-nfs-job。設定「Task details」(工作詳細資料) 部分:
在「New runnable」(新增可執行檔) 視窗中,新增至少一個指令碼或容器,以便執行這項工作。
例如,請執行下列操作:
勾選「Script」核取方塊。系統會隨即顯示欄位。
在欄位中輸入下列指令碼:
echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt將 MOUNT_PATH 替換為工作可執行檔用於存取這個 NFS 的掛接路徑。路徑開頭必須是
/mnt/disks/,後面接著您選擇的目錄或路徑。舉例來說,如要以名為my-nfs的目錄代表這個 NFS,請將掛接路徑設為/mnt/disks/my-nfs。按一下「完成」。
在「Task count」(工作數量) 欄位中,輸入這項工作的任務數量。
例如,輸入
3。在「Parallelism」(平行處理) 欄位中,輸入要並行執行的任務數量。
例如,輸入
1(預設)。
設定「其他設定」頁面:
在左側窗格中,按一下「Additional configurations」(其他設定)。「其他設定」頁面隨即開啟。
針對要掛接至這項工作的每個 NFS,執行下列操作:
在「Storage volume」(儲存空間磁碟區) 部分,按一下「Add new volume」(新增磁碟區)。「New volume」(新增磁碟區) 視窗隨即顯示。
在「New volume」(新增磁碟區) 視窗中,執行下列操作:
在「Volume type」(磁碟區類型) 區段中,選取「Network file system」(網路檔案系統)。
在「File server」(檔案伺服器) 欄位中,輸入伺服器的 IP 位址,該伺服器是您在這項工作的可執行檔中指定的 NFS 所在位置。
舉例來說,如果 NFS 是 Filestore 檔案共用區,請指定 Filestore 執行個體的 IP 位址,您可以描述 Filestore 執行個體來取得該位址。
在「Remote path」(遠端路徑) 欄位中,輸入可存取您在上一個步驟中指定的 NFS 的路徑。
NFS 目錄的路徑開頭必須是
/,後面接著 NFS 的根目錄。在「Mount path」(掛接路徑) 欄位中,輸入您在上一個步驟中指定的 NFS (MOUNT_PATH) 掛接路徑。
按一下「完成」。
選用:設定這項工作的其他欄位。
選用:如要查看工作設定,請按一下左側窗格中的「Preview」(預覽)。
點選「建立」。
「Job details」(工作詳細資料) 頁面會顯示您建立的工作。
gcloud
如要使用 gcloud CLI 建立使用 NFS 的工作,請使用 gcloud batch jobs submit 指令。在工作的 JSON 設定檔中,將 NFS 掛接至 volumes 欄位。
建立含有下列內容的 JSON 檔案:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt" } } ], "volumes": [ { "nfs": { "server": "NFS_IP_ADDRESS", "remotePath": "NFS_PATH" }, "mountPath": "MOUNT_PATH" } ] }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }更改下列內容:
NFS_IP_ADDRESS:NFS 的 IP 位址。舉例來說,如果 NFS 是 Filestore 檔案共用區,請指定 Filestore 執行個體的 IP 位址,您可以描述 Filestore 執行個體來取得該位址。NFS_PATH:這項工作要存取的 NFS 目錄路徑,開頭必須是/,後面接著 NFS 的根目錄。舉例來說,如果 Filestore 檔案共用區名為FILE_SHARE_NAME,則路徑/FILE_SHARE_NAME代表檔案共用區的根目錄,路徑/FILE_SHARE_NAME/subdirectory則代表subdirectory子目錄。MOUNT_PATH:工作可執行檔用來存取這個 NFS 的掛接路徑。路徑開頭必須是/mnt/disks/,後面接著您選擇的目錄或路徑。舉例來說,如要以名為my-nfs的目錄代表這個 NFS,請將掛接路徑設為/mnt/disks/my-nfs。
執行下列指令:
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE更改下列內容:
JOB_NAME:工作名稱。LOCATION:工作的位置。JSON_CONFIGURATION_FILE:JSON 檔案的路徑,其中包含工作的設定詳細資料。
API
如要使用 Batch API 建立使用 NFS 的工作,請使用 jobs.create 方法,並在 volumes 欄位中掛接 NFS。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt"
}
}
],
"volumes": [
{
"nfs": {
"server": "NFS_IP_ADDRESS",
"remotePath": "NFS_PATH"
},
"mountPath": "MOUNT_PATH"
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
更改下列內容:
PROJECT_ID:專案的專案 ID。LOCATION:工作的位置。JOB_NAME:工作名稱。NFS_IP_ADDRESS:網路檔案系統的 IP 位址。舉例來說,如果 NFS 是 Filestore 檔案共用區,請指定 Filestore 執行個體的 IP 位址,您可以描述 Filestore 執行個體來取得該位址。NFS_PATH:這項工作要存取的 NFS 目錄路徑,開頭必須是/,後面接著 NFS 的根目錄。舉例來說,如果 Filestore 檔案共用區名為FILE_SHARE_NAME,則路徑/FILE_SHARE_NAME代表檔案共用區的根目錄,路徑/FILE_SHARE_NAME/subdirectory則代表子目錄。MOUNT_PATH:工作可執行檔用來存取這個 NFS 的掛接路徑。路徑開頭必須是/mnt/disks/,後面接著您選擇的目錄或路徑。舉例來說,如要以名為my-nfs的目錄代表這個 NFS,請將掛接路徑設為/mnt/disks/my-nfs。