本文說明如何建立及執行使用一或多個外部儲存空間磁碟區的 Batch 工作。外部儲存空間選項包括新的或現有的永久磁碟、新的本機 SSD、現有的 Cloud Storage 值區,以及現有的網路檔案系統 (NFS),例如 Filestore 檔案共用。
無論是否新增外部儲存空間磁碟區,每個作業的 Compute Engine VM 都會有開機磁碟,提供作業的作業系統 (OS) 映像檔和指令儲存空間。如要瞭解如何設定作業的開機磁碟,請參閱「VM OS 環境總覽」。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
-
如要取得建立作業所需的權限,請要求管理員授予下列 IAM 角色:
-
批次工作編輯者 (
roles/batch.jobsEditor
) 專案 -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) 在作業的服務帳戶上,預設為預設 Compute Engine 服務帳戶 -
建立使用 Cloud Storage bucket 的工作:
bucket 的「Storage Object Viewer」 (
roles/storage.objectViewer
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
-
批次工作編輯者 (
建立使用儲存空間磁碟區的工作
工作可選擇使用下列一或多種外部儲存空間磁碟區。如要進一步瞭解所有類型的儲存空間磁碟區,以及各類型的差異和限制,請參閱 Compute Engine VM 儲存空間選項說明文件。
- 永久磁碟:區域或地區性,持久性區塊儲存空間
- 本機 SSD: 高效能暫時性區塊儲存空間
- Cloud Storage 值區: 價格實惠的物件儲存空間
- 網路檔案系統 (NFS):遵循網路檔案系統通訊協定的分散式檔案系統,例如 Filestore 檔案共用,這是由 Google Cloud代管的高效能 NFS。
如要允許工作使用每個儲存空間磁碟區,請將磁碟區納入工作定義,並在可執行檔中指定掛接路徑 (mountPath
)。如要瞭解如何建立使用儲存空間磁碟區的工作,請參閱下列一或多個章節:
使用永久磁碟
使用永久磁碟的工作有以下限制:
所有永久磁碟:查看所有永久磁碟的限制。
新永久磁碟與現有永久磁碟:工作中的每個永久磁碟可以是新的 (在工作中定義並建立),也可以是現有的 (已在專案中建立並在工作中指定)。如要使用永久磁碟,必須格式化並掛接至作業的 VM,且 VM 必須與永久磁碟位於相同位置。Batch 會掛接您在工作中加入的任何永久磁碟,並格式化任何新的永久磁碟,但您必須格式化並卸載工作要使用的任何現有永久磁碟。
支援的位置選項、格式選項和掛接選項會因永久磁碟是新建立還是現有而有所不同,詳情請參閱下表:
新的永久磁碟 現有的永久磁碟 格式選項 系統會自動將永久磁碟格式化為
ext4
檔案系統。掛架選項 支援所有選項。
系統支援所有選項,但撰寫除外。這是因為多重寫入模式的限制。
您必須先從所有已連結的 VM 中卸離永久磁碟,才能用於工作。
位置選項 您只能建立區域永久磁碟。
你可以為工作選取任何地點。永久磁碟會在專案執行的區域中建立。
您可以選取區域和地區永久磁碟。
您必須將工作的位置 (或如果已指定,則僅限工作的允許位置) 設為僅包含工作所有永久磁碟的位置。舉例來說,如果是區域永久磁碟,工作的位置必須是磁碟的區域;如果是地區永久磁碟,工作的位置必須是磁碟的地區,或是 (如果指定區域) 地區永久磁碟所在的一或兩個特定區域。執行個體範本:如要在建立這項工作時使用 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」(建立)。「Create batch job」(建立批次工作) 頁面隨即開啟。左側窗格會選取「工作詳細資料」頁面。設定「工作詳細資料」頁面:
選用:在「Job name」(工作名稱) 欄位中,自訂工作名稱。
例如輸入
example-disk-job
。設定「工作詳細資料」部分:
在「新增可執行項目」視窗中,為這項工作新增至少一個指令碼或容器。
舉例來說,如要執行指令碼,列印名為
example.txt
的檔案內容,該檔案位於這項作業使用的永久磁碟根目錄中,請執行下列操作:勾選「指令碼」核取方塊。畫面上會顯示文字方塊。
在文字方塊中輸入下列指令碼:
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
。按一下 [完成]。
在「工作數」欄位中,輸入這項工作的工作數。
例如,輸入
1
(預設值)。在「Parallelism」(平行處理) 欄位中,輸入要並行執行的工作數量。
例如,輸入
1
(預設值)。
設定「資源規格」頁面:
在左側窗格中,按一下「資源規格」。 「資源規格」頁面隨即開啟。
選取這項工作的地點。 如要使用現有的區域永久磁碟,工作 VM 必須位於同一個區域。
在「Region」(區域) 欄位中選取區域。
舉例來說,如要使用範例區域永久磁碟,請選取
us-central1 (Iowa)
(預設)。在「Zone」(可用區) 欄位中,選取可用區。
例如選取
us-central1-a (Iowa)
。
設定「其他設定」頁面:
按一下左側窗格中的「其他設定」。 「其他設定」頁面隨即開啟。
針對要掛接至這項工作的每個現有區域永久磁碟,執行下列操作:
在「儲存空間磁碟區」部分中,按一下「新增磁碟區」。 畫面上會顯示「New volume」(新增磁碟區) 視窗。
在「New volume」(新增卷宗) 視窗中,執行下列操作:
在「Volume type」(磁碟區類型) 區段中,選取「Persistent disk」(永久磁碟) (預設)。
在「Disk」(磁碟) 清單中,選取要掛接至這項工作的現有區域永久磁碟。磁碟必須與這項工作位於相同區域。
舉例來說,選取您準備好的現有區域永久磁碟,該磁碟位於
us-central1-a
區域,且包含example.txt
檔案。選用:如要重新命名這個區域永久磁碟,請按照下列步驟操作:
選取「自訂裝置名稱」。
在「裝置名稱」欄位中,輸入磁碟的新名稱。
在「掛接路徑」欄位中,輸入這個永久磁碟的掛接路徑 (MOUNT_PATH):
例如輸入以下內容:
/mnt/disks/EXISTING_PERSISTENT_DISK_NAME
將 EXISTING_PERSISTENT_DISK_NAME 替換為磁碟名稱。如果您已重新命名區域永久磁碟,請使用新名稱。
例如,將 EXISTING_PERSISTENT_DISK_NAME 替換為
example-disk
。按一下 [完成]。
選用:設定這項工作的其他欄位。
選用:如要檢查工作設定,請在左側窗格中按一下「預覽」。
點選「建立」。
「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 用戶端程式庫建立使用新或現有永久磁碟的 Batch 工作,請使用 CreateJob
函式,並加入下列項目:
- 如要將永久磁碟連結至作業的 VM,請加入下列其中一項:
- 如果這項工作未使用 VM 執行個體範本,請使用
set_remote_path
方法。 - 如果這項工作使用 VM 執行個體範本,請使用
set_instance_template
方法。
- 如果這項工作未使用 VM 執行個體範本,請使用
- 如要將永久磁碟掛接至工作,請搭配
deviceName
和mountPath
欄位使用volumes
欄位。如果是新的永久磁碟,請使用mountOptions
欄位啟用寫入功能。
如需類似用途的程式碼範例,請參閱「使用 Cloud Storage bucket」。
Go
如要使用 Cloud Client Libraries for Go 建立使用新或現有永久磁碟的 Batch 工作,請使用 CreateJob
函式,並加入下列項目:
- 如要將永久磁碟連結至作業的 VM,請加入下列其中一項:
- 如果這項工作未使用 VM 執行個體範本,請加入
AllocationPolicy_AttachedDisk
類型。 - 如果這項工作使用 VM 執行個體範本,請加入
AllocationPolicy_InstancePolicyOrTemplate_InstanceTemplate
類型。
- 如果這項工作未使用 VM 執行個體範本,請加入
- 如要將永久磁碟掛接到工作,請使用
Volume
類型,並搭配Volume_DeviceName
類型和MountPath
欄位。如果是新的永久磁碟,請使用MountOptions
欄位啟用寫入功能。
Java
如要使用 Java 適用的 Cloud 用戶端程式庫建立使用新或現有永久磁碟的 Batch 工作,請使用 CreateJobRequest
類別,並加入下列項目:
- 如要將永久磁碟連結至作業的 VM,請加入下列其中一項:
- 如果這項作業未使用 VM 執行個體範本,請加入
setDisks
方法。 - 如果這項工作使用 VM 執行個體範本,請納入
setInstanceTemplate
方法。
- 如果這項作業未使用 VM 執行個體範本,請加入
- 如要將永久磁碟掛接至工作,請使用
Volume
類別搭配setDeviceName
方法和setMountPath
方法。如果是新的永久磁碟,請使用setMountOptions
方法啟用寫入功能。
舉例來說,請使用下列程式碼範例:
Node.js
如要使用 Node.js 適用的 Cloud 用戶端程式庫,建立使用新或現有永久磁碟的 Batch 工作,請使用 createJob
方法,並加入下列項目:
- 如要將永久磁碟連結至作業的 VM,請加入下列其中一項:
- 如果這項作業未使用 VM 執行個體範本,請加入
AllocationPolicy.AttachedDisk
類別。 - 如果這項工作使用 VM 執行個體範本,請加入
instanceTemplate
屬性。
- 如果這項作業未使用 VM 執行個體範本,請加入
- 如要將永久磁碟掛接到工作,請使用
Volume
類別,並搭配deviceName
屬性和mountPath
屬性。如果是新的永久磁碟,請一併使用mountOptions
屬性啟用寫入功能。
Python
如要使用 Python 適用的 Cloud 用戶端程式庫建立 Batch 工作,並使用新的或現有的永久磁碟,請使用 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,因此這個值必須是375
GB 的倍數。舉例來說,如要使用 2 個本機 SSD,請將這個值設為750
GB。
如果您使用 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,因此這個值必須是375
GB 的倍數。舉例來說,如要使用 2 個本機 SSD,請將這個值設為750
GB。
如果您使用 VM 執行個體範本執行這項工作,請建立如先前所示的 JSON 檔案,但請將
instances
欄位替換為下列內容:"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ], ...
其中
INSTANCE_TEMPLATE_NAME
是這項工作的執行個體範本名稱。如果工作使用本機 SSD,這個執行個體範本必須定義並連結工作要使用的本機 SSD。在本範例中,範本必須定義並連結名為LOCAL_SSD_NAME
的本機 SSD。
Go
Java
Node.js
Python
使用 Cloud Storage 值區
如要建立使用現有 Cloud Storage bucket 的工作,請選取下列其中一種方法:
- 建議:在工作定義中指定值區,直接將值區掛接到工作的 VM,如本節所示。工作執行時,系統會使用 Cloud Storage FUSE,自動將 bucket 掛接至工作 VM。
- 使用 gcloud CLI 或 Cloud Storage API 適用的用戶端程式庫,建立可直接存取 Cloud Storage bucket 的工作。如要瞭解如何直接從 VM 存取 Cloud Storage 值區,請參閱 Compute Engine 說明文件,瞭解如何從 Cloud Storage 值區寫入及讀取資料。
建立使用值區的工作前,請先建立值區或找出現有值區。詳情請參閱「建立值區」和「列出值區」。
您可以使用Google Cloud 控制台、gcloud CLI、Batch API、C++、Go、Java、Node.js 或 Python,建立使用 Cloud Storage 值區的工作。
下列範例說明如何建立工作,並掛接 Cloud Storage 值區。這項工作也有 3 個工作,每個工作都會執行指令碼,在名為 output_task_TASK_INDEX.txt
的 Bucket 中建立檔案,其中 TASK_INDEX
是每個工作的索引:0
、1
和 2
。
控制台
如要使用Google Cloud 控制台建立使用 Cloud Storage bucket 的工作,請按照下列步驟操作:
前往 Google Cloud 控制台的「Job list」(工作清單) 頁面。
按一下「
Create」(建立)。「Create batch job」(建立批次工作) 頁面隨即開啟。左側窗格會選取「工作詳細資料」頁面。設定「工作詳細資料」頁面:
選用:在「Job name」(工作名稱) 欄位中,自訂工作名稱。
例如輸入
example-bucket-job
。設定「工作詳細資料」部分:
在「新增可執行項目」視窗中,為這項工作新增至少一個指令碼或容器。
舉例來說,請執行下列操作:
勾選「指令碼」核取方塊。畫面上會顯示文字方塊。
在文字方塊中輸入下列指令碼:
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
的目錄代表這個值區,請將掛接路徑設為/mnt/disks/my-bucket
。按一下 [完成]。
在「工作數」欄位中,輸入這項工作的工作數。
例如輸入
3
。在「Parallelism」(平行處理) 欄位中,輸入要並行執行的工作數量。
例如,輸入
1
(預設值)。
設定「其他設定」頁面:
按一下左側窗格中的「其他設定」。 「其他設定」頁面隨即開啟。
針對要掛接至這項工作的每個 Cloud Storage bucket,請執行下列操作:
在「儲存空間磁碟區」部分中,按一下「新增磁碟區」。 畫面上會顯示「New volume」(新增磁碟區) 視窗。
在「New volume」(新增卷宗) 視窗中,執行下列操作:
在「Volume type」(磁碟區類型) 區段中,選取「Cloud Storage bucket」(Cloud Storage bucket)。
在「Storage Bucket name」(儲存空間 bucket 名稱) 欄位中,輸入現有 bucket 的名稱。
例如,輸入您在這個作業的可執行檔中指定的值區。
在「掛接路徑」欄位中,輸入您在可執行檔中指定的 bucket 掛接路徑 (MOUNT_PATH)。
按一下 [完成]。
選用:設定這項工作的其他欄位。
選用:如要檢查工作設定,請在左側窗格中按一下「預覽」。
點選「建立」。
「Job details」(工作詳細資料) 頁面會顯示您建立的工作。
gcloud
如要使用 gcloud CLI 建立使用 Cloud Storage bucket 的工作,請使用 gcloud batch jobs submit
指令。在作業的 JSON 設定檔中,將值區掛接至 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_NAME
,路徑BUCKET_NAME
代表值區的根目錄,路徑BUCKET_NAME/subdirectory
代表subdirectory
子目錄。MOUNT_PATH
:作業的可執行檔用來存取這個 bucket 的掛接路徑。路徑開頭必須為/mnt/disks/
,後面接著您選擇的目錄或路徑。舉例來說,如要以名為my-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_NAME
,路徑BUCKET_NAME
代表值區的根目錄,路徑BUCKET_NAME/subdirectory
代表subdirectory
子目錄。MOUNT_PATH
:作業的可執行檔用來存取這個 bucket 的掛接路徑。路徑開頭必須為/mnt/disks/
,後面接著您選擇的目錄或路徑。舉例來說,如要以名為my-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 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證」。
使用網路檔案系統
您可以使用現有的網路檔案系統 (NFS) (例如 Filestore 檔案共用區),透過 Google Cloud 控制台、gcloud CLI 或 Batch API 建立工作。
建立使用 NFS 的作業前,請確認網路的防火牆已正確設定,允許作業的 VM 與 NFS 之間的流量。詳情請參閱設定 Filestore 的防火牆規則。
以下範例說明如何建立工作,指定並掛接 NFS。這項工作也有 3 項工作,每項工作都會執行指令碼,在名為 output_task_TASK_INDEX.txt
的 NFS 中建立檔案,其中 TASK_INDEX
是每項工作的索引:0
、1
和 2
。
控制台
如要使用 Google Cloud 控制台建立使用 NFS 的作業,請按照下列步驟操作:
前往 Google Cloud 控制台的「Job list」(工作清單) 頁面。
按一下「
Create」(建立)。「Create batch job」(建立批次工作) 頁面隨即開啟。左側窗格會選取「工作詳細資料」頁面。設定「工作詳細資料」頁面:
選用:在「Job name」(工作名稱) 欄位中,自訂工作名稱。
例如輸入
example-nfs-job
。設定「工作詳細資料」部分:
在「新增可執行項目」視窗中,為這項工作新增至少一個指令碼或容器。
舉例來說,請執行下列操作:
勾選「指令碼」核取方塊。畫面上會顯示文字方塊。
在文字方塊中輸入下列指令碼:
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
。按一下 [完成]。
在「工作數」欄位中,輸入這項工作的工作數。
例如輸入
3
。在「Parallelism」(平行處理) 欄位中,輸入要並行執行的工作數量。
例如,輸入
1
(預設值)。
設定「其他設定」頁面:
按一下左側窗格中的「其他設定」。 「其他設定」頁面隨即開啟。
針對要掛接至這項工作的每個 Cloud Storage bucket,請執行下列操作:
在「儲存空間磁碟區」部分中,按一下「新增磁碟區」。 畫面上會顯示「New volume」(新增磁碟區) 視窗。
在「New volume」(新增卷宗) 視窗中,執行下列操作:
在「Volume type」(磁碟區類型) 區段中,選取「Network file system」(網路檔案系統)。
在「檔案伺服器」欄位中,輸入伺服器的 IP 位址,該伺服器是您在這個工作可執行檔中指定的 NFS 所在位置。
舉例來說,如果 NFS 是 Filestore 檔案共用區,請指定 Filestore 執行個體的 IP 位址,您可以說明 Filestore 執行個體來取得該位址。
在「Remote path」(遠端路徑) 欄位中,輸入可存取上一步驟中指定 NFS 的路徑。
NFS 目錄路徑的開頭必須為
/
, 後方加上 NFS 的根目錄。在「Mount path」(掛接路徑) 欄位中,輸入您在上一個步驟中指定的 NFS 掛接路徑 (MOUNT_PATH)。
按一下 [完成]。
選用:設定這項工作的其他欄位。
選用:如要檢查工作設定,請在左側窗格中按一下「預覽」。
點選「建立」。
「Job details」(工作詳細資料) 頁面會顯示您建立的工作。
gcloud
如要使用 gcloud CLI 建立使用 NFS 的工作,請使用 gcloud batch jobs submit
指令。在工作的 JSON 設定檔中,於 volumes
欄位掛接 NFS。
建立含有下列內容的 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
。