本文档介绍如何创建和运行使用一个或多个外部存储卷的 Batch 作业。存储方案包括新的或现有的永久性磁盘、新的本地 SSD、现有的 Cloud Storage 存储分区和现有网络文件系统 (NFS),例如 Filestore 共享的文件。
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门,并通过完成项目和用户的前提条件来启用 Batch。
-
如需获取创建作业所需的权限,请让管理员授予您以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务帐号(默认情况下是默认的 Compute Engine 服务帐号)上的服务帐号用户 (
roles/iam.serviceAccountUser
) -
创建一个使用 Cloud Storage 存储桶的作业:
对该存储桶使用 Storage Object Viewer (
roles/storage.objectViewer
)
如需详细了解如何授予角色,请参阅管理访问权限。
-
项目的 Batch Job Editor (
创建使用存储卷的作业
默认情况下,作业的每个 Compute Engine 虚拟机都有一个包含操作系统的启动永久性磁盘。您也可以视需要创建使用额外存储卷的作业。 具体而言,作业的虚拟机可以使用以下一种或多种存储卷。如需详细了解所有存储卷类型及其差异和限制,请参阅 Compute Engine 虚拟机存储选项文档。
- 永久性磁盘:可用区级或区域级永久性块存储
- 本地 SSD:高性能暂时性块存储
- Cloud Storage 存储桶:经济实惠的对象存储
- 网络文件系统 (NFS):遵循网络文件系统协议的分布式文件系统,例如 Filestore 文件共享,它是 Google Cloud 上托管的高性能 NFS
您可以允许作业使用每个存储卷,方法是将其包含在作业定义中,并在可运行作业中指定其装载路径 (mountPath
)。如需了解如何创建使用存储卷的作业,请参阅以下一个或多个部分:
使用永久性磁盘
使用永久性磁盘的作业具有以下限制:
所有永久性磁盘:查看所有永久性磁盘的限制。
新的永久性磁盘与现有的永久性磁盘:作业中的每个永久性磁盘可以是新的(在作业中定义和创建),也可以是现有的(已在项目中创建并在作业中指定)。如需使用永久性磁盘,您需要将其格式化并装载到作业的虚拟机,该虚拟机必须与永久性磁盘位于同一位置。Batch 会装载您的作业中包含的所有永久性磁盘并格式化任何新的永久性磁盘,但您必须格式化和卸载您希望作业使用的任何现有永久性磁盘。
受支持的位置选项、格式选项和装载选项在新磁盘与现有永久性磁盘之间转换,如下表所述:
新的永久性磁盘 现有永久性磁盘 格式选项 永久性磁盘会使用
ext4
文件系统自动格式化。装载选项 支持所有选项。
支持除写入以外的所有选项。这是由于多写入器模式的限制。
您必须将永久性磁盘与其挂接的任何虚拟机分离,然后才能将其用于作业。
位置选项 您只能创建可用区永久性磁盘。
您可以为作业选择任何位置。永久性磁盘在项目所在的可用区内创建。
您可以选择可用区级和区域级永久性磁盘。
您必须将作业的位置(或者仅指定作业允许的位置)设置为仅包含作业的所有永久性磁盘的位置。例如,对于可用区永久性磁盘,作业的位置必须是磁盘所在的可用区;对于区域级永久性磁盘,作业的位置必须是磁盘所在的区域;如果指定了可用区,则磁盘所在的位置可以是区域永久性磁盘中的一个或两个特定可用区。实例模板:如要在创建此作业时使用虚拟机实例模板,您必须在实例模板中为此作业挂接任何永久性磁盘。否则,如果您不想使用实例模板,则必须直接在作业定义中挂接任何永久性磁盘。
您可以通过 Google Cloud 控制台、gcloud CLI、Batch API、Go、Java、Node.js 或 Python 创建使用永久性磁盘的作业。
控制台
以下示例使用 Google Cloud 控制台创建一项作业,该作业运行脚本以从位于 us-central1-a
可用区的现有可用区永久性磁盘读取文件。示例脚本假定作业的现有可用区永久性磁盘在根目录下包含一个名为 example.txt
的文本文件。
可选:如果您要创建可用于运行示例脚本的可用区级永久性磁盘,请在创建作业之前执行以下操作:
将一个名为
example-disk
的新空白永久性磁盘挂接到us-central1-a
区域中的 Linux 虚拟机,然后在虚拟机上运行命令以格式化和装载磁盘。如需了解相关说明,请参阅向虚拟机添加永久性磁盘。暂时不要断开与虚拟机的连接。
如需在永久性磁盘上创建
example.txt
,请在虚拟机上运行以下命令:如需将当前工作目录更改为永久性磁盘的根目录,请输入以下命令:
cd VM_MOUNT_PATH
将 VM_MOUNT_PATH 替换为上一步中永久性磁盘装载到此虚拟机的目录的路径,例如
/mnt/disks/example-disk
。按
Enter
键。如需创建并定义一个名为
example.txt
的文件,请输入以下命令:cat > example.txt
按
Enter
键。输入文件的内容。例如,输入
Hello world!
。如需保存文件,请按
Ctrl+D
(在 macOS 上,按Command+D
)。
完成后,您可以断开与虚拟机的连接。
将永久性磁盘与虚拟机分离。
如果您不再需要该虚拟机,可以将其删除,以自动分离永久性磁盘。
否则,请分离永久性磁盘。如需了解相关说明,请参阅分离和重新挂接启动磁盘并分离
example-disk
永久性磁盘,而不是虚拟机的启动磁盘。
如需使用 Google Cloud 控制台创建使用现有可用区永久性磁盘的作业,请执行以下操作:
在 Google Cloud 控制台中,转到作业列表页面。
点击
创建。创建批量作业页面会打开。在作业名称字段中,输入作业的名称。
例如,输入
example-disk-job
。在区域字段中,为此作业选择位置。
例如,选择
us-central1 (Iowa)
(默认)。在可用区字段中,选择包含要用于此作业的现有可用区永久性磁盘的可用区。
例如,选择
us-central1-a (Iowa)
。在 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 替换为您计划将永久性磁盘装载到此作业的虚拟机所在的路径(例如
/mnt/disks/example-disk
)。点击完成。
在任务数字段中,输入此作业的任务数。
例如,输入
1
。在并行处理字段中,输入要并发运行的任务数量。
例如,输入
1
(默认值)。对于要装载到此作业的每个现有可用区级永久性磁盘,请执行以下操作:
点击添加新卷。系统会显示新建卷窗格。
在新建卷窗格中,执行以下操作:
在卷类型部分中,选择永久性磁盘。
在磁盘菜单中,选择要装载到此作业的现有可用区级永久性磁盘。磁盘必须与此作业位于同一可用区内。
例如,选择您准备的现有可用区级永久性磁盘,该文件位于
us-central1-a
可用区并包含文件example.txt
。可选:如果要重命名此可用区级永久性磁盘,请执行以下操作:
选择自定义设备名称。
在设备名称字段中,为磁盘输入新名称。
在装载路径字段中,输入此永久性磁盘的装载路径 (MOUNT_PATH):
例如,输入以下内容:
/mnt/disks/EXISTING_PERSISTENT_DISK_NAME
将 EXISTING_PERSISTENT_DISK_NAME 替换为磁盘的名称。如果您更改了地区永久性磁盘,请使用新名称。
例如,将 EXISTING_PERSISTENT_DISK_NAME 替换为
example-disk
。点击完成。
可选:配置此作业的其他字段。
例如,对于其他所有字段,请使用默认值。
点击创建。
作业列表页面会显示您创建的作业。
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
。NEW_PERSISTENT_DISK_NAME
:新的永久性磁盘的名称。
如果您要为此作业使用虚拟机实例模板,请创建一个如上所示的 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
。NEW_PERSISTENT_DISK_NAME
:新的永久性磁盘的名称。
如果您要为此作业使用虚拟机实例模板,请创建一个如上所示的 JSON 文件,但需要将
instances
字段替换为以下内容:"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ], ...
其中
INSTANCE_TEMPLATE_NAME
是此作业的实例模板的名称。对于使用永久性磁盘的作业,此实例模板必须定义并挂接您希望作业使用的永久性磁盘。在此示例中,模板必须定义并挂接名为NEW_PERSISTENT_DISK_NAME
的新永久性磁盘,并挂接名为EXISTING_PERSISTENT_DISK_NAME
的现有永久性磁盘。
Go
如需使用 Go 版 Cloud 客户端库创建使用新永久性磁盘或现有永久性磁盘的 Batch 作业,请使用 CreateJob
函数,并添加以下代码:
- 如需将永久性磁盘挂接到作业的作业,请添加以下某一项:
- 如果您没有为此作业使用虚拟机实例模板,请添加
AllocationPolicy_AttachedDisk
类型。 - 如果您要为此作业使用虚拟机实例模板,请添加
AllocationPolicy_InstancePolicyOrTemplate_InstanceTemplate
类型。
- 如果您没有为此作业使用虚拟机实例模板,请添加
- 如需将永久性磁盘装载到作业中,请使用
Volume
类型以及Volume_DeviceName
类型和MountPath
字段。对于新的永久性磁盘,还可以使用MountOptions
字段来启用写入功能。
如需查看类似用例的代码示例,请参阅使用 Cloud Storage 存储桶。
Java
如需使用 Java 版 Cloud 客户端库创建使用新永久性磁盘或现有永久性磁盘的 Batch 作业,请使用 CreateJobRequest
类,并添加以下代码:
- 如需将永久性磁盘挂接到作业的作业,请添加以下某一项:
- 如果您没有为此作业使用虚拟机实例模板,请添加
setDisks
方法。 - 如果您要为此作业使用虚拟机实例模板,请添加
setInstanceTemplate
方法。
- 如果您没有为此作业使用虚拟机实例模板,请添加
- 如需将永久性磁盘装载到作业中,请使用
Volume
类以及setDeviceName
方法和setMountPath
方法。对于新的永久性磁盘,您还可以使用setMountOptions
方法启用写入。
如需查看类似用例的代码示例,请参阅使用 Cloud Storage 存储桶。
Node.js
如需使用 Node.js 版 Cloud 客户端库创建使用新永久性磁盘或现有永久性磁盘的 Batch 作业,请使用 createJob
方法,并添加以下代码:
- 如需将永久性磁盘挂接到作业的作业,请添加以下某一项:
- 如果您没有为此作业使用虚拟机实例模板,请添加
AllocationPolicy.AttachedDisk
类。 - 如果您要为此作业使用虚拟机实例模板,请添加
instanceTemplate
属性。
- 如果您没有为此作业使用虚拟机实例模板,请添加
- 如需将永久性磁盘装载到作业中,请使用具有
deviceName
属性和mountPath
属性的Volume
类。对于新的永久性磁盘,还可以使用mountOptions
属性启用写入。
如需查看类似用例的代码示例,请参阅使用 Cloud Storage 存储桶。
Python
如需使用 Python 版 Cloud 客户端库创建使用新永久性磁盘或现有永久性磁盘的 Batch 作业,请使用 CreateJob
函数,并添加以下代码:
- 如需将永久性磁盘挂接到作业的作业,请添加以下某一项:
- 如果您没有为此作业使用虚拟机实例模板,请添加
AttachedDisk
类。 - 如果您要为此作业使用虚拟机实例模板,请添加
instance_template
属性。
- 如果您没有为此作业使用虚拟机实例模板,请添加
- 如需将永久性磁盘装载到作业中,请使用具有
device_name
属性和mount_path
属性的Volume
类。对于新的永久性磁盘,还可以使用mount_options
属性来启用写入功能。
如需查看类似用例的代码示例,请参阅使用 Cloud Storage 存储桶。
使用本地 SSD
使用本地 SSD 的作业具有以下限制:
- 所有本地 SSD 查看所有本地 SSD 的限制。
- 实例模板:如需在创建此作业时指定虚拟机实例模板,您必须在实例模板中为此作业挂接所有永久性磁盘。否则,如果您不想使用实例模板,则必须直接在作业定义中挂接任何永久性磁盘。
您可以通过 gcloud CLI 或 Batch API 创建使用本地 SSD 的作业。以下示例展示了如何创建、挂接和装载本地 SSD 的作业。该作业还有 3 项任务,每项任务都运行脚本以在本地 SSD 中创建一个名为 output_task_TASK_INDEX.txt
的文件,其中 TASK_INDEX
是每个任务的索引:0
、1
和 2
。
gcloud
如需使用 gcloud CLI 创建使用本地 SSD 的作业,请使用 gcloud batch jobs submit
命令。在作业的 JSON 配置文件中,创建本地 SSD 并将其挂接到 instances
字段,并将本地 SSD 装载到 volumes
字段。
创建一个 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
:作业虚拟机的机器类型,可以是预定义或自定义。允许的本地 SSD 数量取决于作业虚拟机的机器类型。LOCAL_SSD_NAME
:为此作业创建的本地 SSD 的名称。LOCAL_SSD_SIZE
:所有本地 SSD 的大小(以 GB 为单位)。每个本地 SSD 为 375 GB,因此该值必须是375
GB 的倍数。例如,对于 2 个本地 SSD,请将此值设为750
GB。
如果您要为此作业使用虚拟机实例模板,请创建一个如上所示的 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
方法。在请求中,创建本地 SSD 并将其附加到 instances
字段,并将本地 SSD 装载到 volumes
字段中。
如果您没有为此作业使用实例模板,请发出以下请求:
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
:作业虚拟机的机器类型,可以是预定义或自定义。允许的本地 SSD 数量取决于作业虚拟机的机器类型。LOCAL_SSD_NAME
:为此作业创建的本地 SSD 的名称。LOCAL_SSD_SIZE
:所有本地 SSD 的大小(以 GB 为单位)。每个本地 SSD 为 375 GB,因此该值必须是375
GB 的倍数。例如,对于 2 个本地 SSD,请将此值设为750
GB。
如果您要为此作业使用虚拟机实例模板,请创建一个如上所示的 JSON 文件,但需要将
instances
字段替换为以下内容:"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ], ...
其中
INSTANCE_TEMPLATE_NAME
是此作业的实例模板的名称。对于使用本地 SSD 的作业,此实例模板必须定义并挂接您希望作业使用的本地 SSD。在此示例中,模板必须定义并挂接名为LOCAL_SSD_NAME
的本地 SSD。
使用 Cloud Storage 存储桶
如需创建使用现有 Cloud Storage 存储桶的作业,请选择以下方法之一:
- 建议操作:通过在作业定义中指定存储桶来将存储桶直接装载到作业的虚拟机,如本部分所示。作业运行时,存储桶会使用 Cloud Storage FUSE 自动装载到作业的虚拟机。
- 使用适用于 Cloud Storage API 的
gsutil
命令行工具或客户端库,创建可以直接访问 Cloud Storage 存储桶的任务。如需了解如何直接从虚拟机访问 Cloud Storage 存储桶,请参阅 Compute Engine 文档中的从 Cloud Storage 存储桶写入和读取数据。
在创建使用存储桶的作业之前,请先创建存储桶或标识现有存储桶。如需了解详情,请参阅创建存储分区和列出存储分区。
您可以使用 Google Cloud 控制台、gcloud CLI、Batch API、Go、Java、Node.js 或 Python 创建使用 Cloud Storage 存储桶的作业。
以下示例展示了如何创建装载 Cloud Storage 存储桶的作业。该作业还有 3 项任务,每项任务都运行一个脚本,在名为 output_task_TASK_INDEX.txt
的存储桶中创建一个文件,其中 TASK_INDEX
是每个任务的索引:0
、1
和 2
。
控制台
如需使用 Google Cloud 控制台创建使用 Cloud Storage 存储桶的作业,请执行以下操作:
在 Google Cloud 控制台中,转到作业列表页面。
点击
创建。创建批量作业页面会打开。在作业名称字段中,输入
example-bucket-job
。在区域字段中,为此作业选择位置。
例如,选择
us-central1 (Iowa)
(默认)。在可用区字段中,选择
any
(默认)。在虚拟机预配模型部分中,选择标准(默认)。
点击通用。
在系列图书字段中,选择 E2(默认)。
在机器类型字段中,选择 e2-medium(2 个 vCPU,4 GB 内存)(默认)。
在 New runnable 窗格中,执行以下操作:
选中 Script 复选框。系统会显示一个文本框。
在文本框中输入以下脚本:
echo Hello world from task ${BATCH_TASK_INDEX}. >> MOUNT_PATH/output_task_${BATCH_TASK_INDEX}.txt
其中,MOUNT_PATH 是此作业的可运行项用于访问现有 Cloud Storage 存储桶的装载路径。路径必须以
/mnt/disks/
开头,后跟您选择的目录或路径。例如,如果您要使用名为my-bucket
的目录表示此存储桶,请将装载路径设置为/mnt/disks/my-bucket
。点击完成。
在任务数字段中,输入
3
。在并行处理字段中,输入
1
(默认)。在任务资源部分,通过执行以下操作来指定每项任务所需的虚拟机资源量:
在核心数字段中,输入
1
(默认值)。在内存字段中,输入
0.5
(默认值)。
点击添加新卷。系统会显示新建卷窗格。
在新建卷窗格中,执行以下操作:
在卷类型部分中,选择 Cloud Storage 存储桶。
在 Storage Bucket name 字段中,输入现有存储桶的名称。
例如,输入您在此作业的 Runnable 中指定的存储桶。
在装载路径字段中,输入您在上一步中指定的存储桶的装载路径 (MOUNT_PATH)。
点击完成。
点击创建。
作业列表页面会显示您创建的作业。
gcloud
如需使用 gcloud CLI 创建使用 Cloud Storage 存储桶的作业,请使用 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
:作业的运行程序用于访问此存储桶的装载路径。路径必须以/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 存储桶的作业,请使用 jobs.create
方法并将存储桶装载到 volumes
字段中。
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
:作业的运行程序用于访问此存储桶的装载路径。路径必须以/mnt/disks/
开头,后跟您选择的目录或路径。 例如,如果您要使用名为my-bucket
的目录表示此存储桶,请将装载路径设置为/mnt/disks/my-bucket
。
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 的作业之前,请确保网络的防火墙已正确配置为允许作业的虚拟机与 NFS 之间的流量。如需了解详情,请参阅为 Filestore 配置防火墙规则。
以下示例展示了如何创建用于指定和装载 NFS 的作业。该作业还有 3 项任务,每项任务都运行一个脚本来在 NFS 中创建一个名为 output_task_TASK_INDEX.txt
的文件,其中 TASK_INDEX
是每个任务的索引:0
、1
和 2
。
控制台
如需使用 Google Cloud 控制台创建使用 Cloud Storage 存储桶的作业,请执行以下操作:
在 Google Cloud 控制台中,转到作业列表页面。
点击
创建。创建批量作业页面会打开。在作业名称字段中,输入
example-nfs-job
。在区域字段中,为此作业选择位置。
例如,选择
us-central1 (Iowa)
(默认)。在可用区字段中,选择
any
(默认)。在虚拟机预配模型部分中,选择标准(默认)。
点击通用。
在系列图书字段中,选择 E2(默认)。
在机器类型字段中,选择 e2-medium(2 个 vCPU,4 GB 内存)(默认)。
在 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
。点击完成。
在任务数字段中,输入
3
。在并行处理字段中,输入
1
(默认)。在任务资源部分,通过执行以下操作来指定每项任务所需的虚拟机资源量:
在核心数字段中,输入
1
(默认值)。在内存字段中,输入
0.5
(默认值)。
点击添加新卷。系统会显示新建卷窗格。
在新建卷窗格中,执行以下操作:
在卷类型部分中,选择网络文件系统。
在文件服务器字段中,输入您在此作业的运行作业中指定的 NFS 所在的服务器的 IP 地址。
例如,如果您的 NFS 是 Filestore 文件共享,则可以指定托管 Filestore 文件共享的虚拟机 IP 地址,您可以通过描述 Filestore 虚拟机获取该地址。
在远程路径字段中,输入可访问上一步中指定的 NFS 的路径。
NFS 目录的路径必须以
/
开头,后跟 NFS 的根目录。在装载路径字段中,输入您在上一步中指定的 NFS (MOUNT_PATH) 的装载路径。
点击完成。
点击创建。
作业列表页面会显示您创建的作业。
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 的根目录。例如,对于名为FILE_SHARE_NAME
的 Filestore 文件共享,路径/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 的根目录。例如,对于名为FILE_SHARE_NAME
的 Filestore 文件共享,路径/FILE_SHARE_NAME
表示文件共享的根目录,路径/FILE_SHARE_NAME/subdirectory
表示子目录。MOUNT_PATH
:作业的运行程序用于访问此 NFS 的装载路径。路径必须以/mnt/disks/
开头,后跟您选择的目录或路径。 例如,如果您要使用名为my-nfs
的目录表示此 NFS,请将装载路径设置为/mnt/disks/my-nfs
。