本文档介绍了如何创建和运行使用 一个或多个外部存储卷 外部存储选项包括新的或现有的永久性磁盘、新的本地 SSD、现有的 Cloud Storage 存储桶,以及现有的网络文件系统 (NFS),例如 Filestore 文件共享。
无论您是否添加外部存储卷,作业的每个 Compute Engine 虚拟机都具有一个启动磁盘,该磁盘为作业的操作系统 (OS) 映像和指令提供存储空间。如需了解如何为作业配置启动磁盘,请改为参阅虚拟机操作系统环境概览。
准备工作
- 如果您以前没有使用过 Batch,请参阅 Batch 使用入门 并通过填写 针对项目和用户的前提条件。
-
如需获取创建作业所需的权限, 请让管理员授予您 以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
Service Account User (
roles/iam.serviceAccountUser
) 服务账号用户 针对作业的服务账号,该账号默认为默认 Compute Engine 服务账号 -
创建使用 Cloud Storage 存储桶的作业:
Storage Object Viewer (
roles/storage.objectViewer
) 针对存储桶
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
创建使用存储卷的作业
作业可以使用以下一种或多种类型的 存储卷如需详细了解所有类型的存储卷以及每种卷的差异和限制,请参阅 Compute Engine 虚拟机存储选项文档。
- 永久性磁盘:可用区级或区域级永久性块存储
- 本地 SSD: 高性能临时块存储服务
- Cloud Storage 存储桶: 经济实惠的对象存储
- 网络文件系统 (NFS):遵循网络文件系统协议的分布式文件系统,例如 Filestore 文件共享,它是托管在 Google Cloud 上的高性能 NFS
您可以通过添加存储卷来允许作业使用每个存储卷
并指定其
装载路径 (mountPath
)
运行容器如需了解如何创建使用存储卷的作业,请参阅以下一个或多个部分:
使用永久性磁盘
使用永久性磁盘的作业存在以下限制:
所有永久性磁盘:查看所有永久性磁盘的限制。
新的永久性磁盘与现有的永久性磁盘:作业中的每个永久性磁盘都可以 新建(在作业中定义和创建)或现有(已经 在项目中创建并在作业中指定)。要使用永久性磁盘 它需要 格式化并装载到 这些虚拟机必须与永久性磁盘位于同一位置。 批量挂载您在作业中添加的所有永久性磁盘,并格式化所有新的永久性磁盘,但您必须格式化并卸载要让作业使用的所有现有永久性磁盘。
受支持的地理位置选项 格式选项 和 装载选项 新永久性磁盘和现有永久性磁盘之间会有所不同,具体说明如下 表:
新的永久性磁盘 现有永久性磁盘 格式选项 永久性磁盘会自动采用
ext4
文件系统格式化。装载选项 支持所有选项。
支持除写入以外的所有选项。这是由于多写入者模式的限制所致。
您必须先从永久性磁盘所挂接的所有虚拟机中分离永久性磁盘,然后才能将其用于作业。
位置选项 您只能创建可用区永久性磁盘。
您可以为作业选择任何地点。 磁盘是在项目运行所在的可用区中创建的。
您可以选择地区和区域永久性磁盘。
您必须设置任务的位置(或者,如果指定,则仅设置任务的 允许的位置) 设置为仅包含作业所有 磁盘。例如,对于可用区级永久性磁盘,作业的存储位置必须是磁盘所在的可用区;对于区域级永久性磁盘,作业的存储位置必须是磁盘所在的区域,或者(如果指定了可用区)是区域级永久性磁盘所在的一个或两个特定可用区。实例模板:如果您想要 在创建此作业时使用虚拟机实例模板, 您必须在实例中为此作业挂接所有永久性磁盘 模板。否则,如果您不想使用实例模板,则必须直接在作业定义中附加任何永久性磁盘。
您可以使用 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 虚拟机,然后在虚拟机上运行命令以格式化和装载磁盘。如需查看相关说明,请参阅向虚拟机添加永久性磁盘。请勿断开与虚拟机的连接。
如需在永久性磁盘上创建
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 控制台中,前往 Job list(作业列表)页面。
点击
创建。通过 此时会打开创建批量作业页面。在左侧窗格中,选择作业详情页面。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
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 替换为您计划将永久性磁盘挂载到此作业的虚拟机的路径,例如
/mnt/disks/example-disk
。点击完成。
在任务数字段中,输入此作业的任务数量。
例如,输入
1
(默认值)。在并行性字段中,输入要并发运行的任务数量。
例如,输入
1
(默认值)。
配置资源规范页面:
在左侧窗格中,点击资源规范。 系统随即会打开资源规范页面。
选择此作业的位置。 如需使用现有的地区永久性磁盘,作业的虚拟机必须 位于同一可用区
在区域字段中,选择一个区域。
例如,如需使用可用区级永久性磁盘, 选择
us-central1 (Iowa)
(默认)。在可用区字段中,选择一个可用区。
例如,选择
us-central1-a (Iowa)
。
配置其他配置页面:
在左侧窗格中,点击其他配置。 系统会打开其他配置页面。
对于要挂载到此作业的每个现有可用区级永久性磁盘,请执行以下操作:
在存储卷部分中,点击添加新卷。 系统随即会显示新建卷窗口。
在新建卷窗口中,执行以下操作:
在卷类型部分,选择永久性磁盘(默认)。
在磁盘列表中,选择要挂载到此作业的现有可用区级永久性磁盘。磁盘必须位于 用作此作业的可用区
例如,选择您准备好的现有可用区永久性磁盘,该磁盘位于
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
。非启动永久性磁盘的默认磁盘类型为pd-standard
。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。
要通过
批处理 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
:新永久性磁盘的名称。
如果您为此作业使用虚拟机实例模板,请创建一个 JSON 文件,如前所示,但将
instances
字段替换为以下内容:"instances": [ { "instanceTemplate": "INSTANCE_TEMPLATE_NAME" } ], ...
其中
INSTANCE_TEMPLATE_NAME
是此作业的实例模板的名称。对于使用 永久性磁盘,此实例模板必须定义并挂接 作业使用的永久性磁盘对于此示例,模板必须定义并挂接一个名为NEW_PERSISTENT_DISK_NAME
的新永久性磁盘,并挂接一个名为EXISTING_PERSISTENT_DISK_NAME
的现有永久性磁盘。
C++
创建使用新作业或现有作业的 Batch 作业
永久性磁盘
C++ 版 Cloud 客户端库,请使用
CreateJob
函数
包括:
- 如需将永久性磁盘挂接到作业的虚拟机,请添加以下任一项:
- 如果您不为此作业使用虚拟机实例模板,请使用
set_remote_path
方法。 - 如果您为此作业使用虚拟机实例模板,请使用
set_instance_template
方法。
- 如果您不为此作业使用虚拟机实例模板,请使用
- 如需将永久性磁盘挂载到作业,请将
volumes
字段与deviceName
和mountPath
字段搭配使用。对于新的永久性磁盘,还应使用mountOptions
字段启用写入。
如需查看类似用例的代码示例,请参阅 使用 Cloud Storage 存储桶。
Go
创建使用新作业或现有作业的 Batch 作业
永久性磁盘
Go 版 Cloud 客户端库,请使用
CreateJob
函数
包括:
- 如需将永久性磁盘挂接到作业的虚拟机,请添加以下任一项:
- 如果您没有为此作业使用虚拟机实例模板,
添加
AllocationPolicy_AttachedDisk
类型。 - 如果要为此作业使用虚拟机实例模板,
添加
AllocationPolicy_InstancePolicyOrTemplate_InstanceTemplate
类型。
- 如果您没有为此作业使用虚拟机实例模板,
添加
- 要将永久性磁盘装载到作业中,请使用
Volume
类型 (具有Volume_DeviceName
类型) 和MountPath
字段。对于新的永久性磁盘,还可以使用MountOptions
字段以启用写入。
Java
创建使用新作业或现有作业的 Batch 作业
永久性磁盘
Java 版 Cloud 客户端库,请使用
CreateJobRequest
类
包括:
- 如需将永久性磁盘挂接到虚拟机,以便执行某项作业,
包含以下其中一项:
- 如果您没有为此作业使用虚拟机实例模板,
添加
setDisks
方法。 - 如果要为此作业使用虚拟机实例模板,
添加
setInstanceTemplate
方法。
- 如果您没有为此作业使用虚拟机实例模板,
添加
- 要将永久性磁盘装载到作业中,请使用
Volume
类 使用setDeviceName
方法 和setMountPath
方法。 对于新的永久性磁盘,还应使用setMountOptions
方法启用写入。
例如,请使用以下代码示例:
Node.js
如需使用 Node.js 版 Cloud 客户端库创建使用新或现有永久性磁盘的批量作业,请使用 createJob
方法并添加以下内容:
- 如需将永久性磁盘挂接到作业的虚拟机,请添加以下任一项:
- 如果您没有为此作业使用虚拟机实例模板,
添加
AllocationPolicy.AttachedDisk
类。 - 如果您要为此作业使用虚拟机实例模板,请添加
instanceTemplate
属性。
- 如果您没有为此作业使用虚拟机实例模板,
添加
- 如需将永久性磁盘挂载到作业,请将
Volume
类与deviceName
属性和mountPath
属性搭配使用。对于新的永久性磁盘,还应使用mountOptions
属性启用写入。
Python
如需使用 Python 版 Cloud 客户端库创建使用新或现有永久性磁盘的批处理作业,请使用 CreateJob
函数,并添加以下内容:
- 如需将永久性磁盘挂接到作业的虚拟机,请添加以下任一项:
- 如果您没有为此作业使用虚拟机实例模板,
添加
AttachedDisk
类。 - 如果要为此作业使用虚拟机实例模板,
请添加
instance_template
属性。
- 如果您没有为此作业使用虚拟机实例模板,
添加
- 要将永久性磁盘装载到作业中,请使用
Volume
类 具有device_name
属性 和mount_path
属性。对于新的永久性磁盘,还应使用mount_options
属性启用写入。
例如,请使用以下代码示例:
使用本地 SSD
使用本地 SSD 的作业具有以下限制:
- 所有本地 SSD。查看 针对所有本地 SSD 的限制。
- 实例模板:如果您想在创建此作业时指定虚拟机实例模板,则必须在实例模板中为此作业挂接任何永久性磁盘。如果您不想使用某个实例 您必须将任何永久性磁盘直接挂接到 作业定义。
您可以使用 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 配置文件中,创建并挂接本地 SSD
instances
字段,并在 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
: 机器类型可以是 预定义或 自定义、 虚拟机数量通过 允许的本地 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。对于此示例,模板必须定义并附加一个名为LOCAL_SSD_NAME
的本地 SSD。
运行以下命令:
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
替换以下内容:
JOB_NAME
:作业的名称。LOCATION
:作业的位置。JSON_CONFIGURATION_FILE
:包含作业配置详细信息的 JSON 文件的路径。
API
如需创建使用本地 SSD 的作业,请使用
批处理 API,请使用
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
: 机器类型可以是 预定义或 自定义、 虚拟机数量通过 允许的本地 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。在本示例中 该模板必须定义并挂接名为LOCAL_SSD_NAME
。
Go
Java
Node.js
Python
使用 Cloud Storage 存储桶
如需创建使用现有 Cloud Storage 存储桶的作业,请选择以下方法之一:
- 建议:在作业的定义中指定存储桶,以便将存储桶直接挂载到作业的虚拟机,如本部分所示。在作业运行时 该存储桶会使用 Cloud Storage FUSE。
- 创建作业,其中包含直接访问 Cloud Storage 存储桶(使用 gcloud CLI 或 适用于 Cloud Storage API 的客户端库。如需了解如何直接从虚拟机访问 Cloud Storage 存储桶,请参阅 Compute Engine 文档中的对 Cloud Storage 存储桶执行数据读写操作部分。
在创建使用存储桶的作业之前,请先创建一个存储桶,或指定 现有存储桶如需了解详情,请参阅创建存储桶和列出存储桶。
您可以使用 Google Cloud 控制台、gcloud CLI、批处理 API、C++、Go、Java、Node.js 或 Python 创建使用 Cloud Storage 存储桶的作业。
以下示例介绍了如何创建用于挂载 Cloud Storage 存储桶的作业。该作业还包含 3 个任务,每个
创建一个脚本,用于在名为
output_task_TASK_INDEX.txt
其中,TASK_INDEX
是每个任务的索引:
0
、1
和 2
。
控制台
如需创建使用 Cloud Storage 存储桶的作业,您需要 Google Cloud 控制台中,请执行以下操作:
在 Google Cloud 控制台中,前往作业列表页面。
点击
创建。通过 此时会打开创建批量作业页面。在左侧窗格中, 作业详情页面处于选中状态。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
example-bucket-job
。配置任务详情部分:
在新建可运行对象窗口中,添加至少一个脚本或容器以便此作业运行。
例如,执行以下操作:
选中脚本复选框。系统会显示一个文本框。
在文本框中,输入以下脚本:
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
(默认值)。
配置 Additional configurations(其他配置)页面:
在左侧窗格中,点击其他配置。 系统会打开其他配置页面。
对于您要装载到的每个 Cloud Storage 存储桶 执行以下操作:
在存储卷部分中,点击添加新卷。 系统随即会显示新建卷窗口。
在新建卷窗口中,执行以下操作:
在卷类型部分,选择 Cloud Storage 存储桶。
在存储桶名称字段中,输入现有存储桶的名称。
例如,输入您在此 它们是可以运行的
在装载路径字段中,输入 存储桶 (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
。
C++
C++
有关详情,请参阅 批处理 C++ API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
Go
有关详情,请参阅 批处理 Go API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
如需了解详情,请参阅 批处理 Java API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
Node.js
如需了解详情,请参阅 批处理 Node.js API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
有关详情,请参阅 批处理 Python API 参考文档。
如需向 Batch 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
使用网络文件系统
您可以创建使用现有网络文件系统 (NFS) 的作业, 例如 Filestore 文件共享, 使用 Google Cloud 控制台、gcloud CLI 或 Batch API。
在创建使用 NFS 的作业之前,请确保网络的防火墙已正确配置,以允许作业的虚拟机与 NFS 之间传输流量。如需了解详情,请参阅为 Filestore 配置防火墙规则。
以下示例介绍了如何创建作业,该作业指定
会装载一个 NFS该职位还有 3 个
每个任务都运行一个脚本,在名为
output_task_TASK_INDEX.txt
其中,TASK_INDEX
是每个任务的索引:
0
、1
和 2
。
控制台
如需使用 Google Cloud 控制台创建使用 NFS 的作业,请执行以下操作:
在 Google Cloud 控制台中,前往 Job list(作业列表)页面。
点击
创建。通过 此时会打开创建批量作业页面。在左侧窗格中,选择作业详情页面。配置作业详情页面:
可选:在作业名称字段中,自定义作业名称。
例如,输入
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
。在并行数量字段中,输入 同时运行
例如,输入
1
(默认值)。
配置 Additional configurations(其他配置)页面:
在左侧窗格中,点击其他配置。 系统会打开其他配置页面。
对于您要装载到的每个 Cloud Storage 存储桶 执行以下操作:
在存储卷部分中,点击添加新卷。 系统随即会显示新建卷窗口。
在新建卷窗口中,执行以下操作:
在卷类型部分中,选择网络文件系统。
在文件服务器字段中,输入 您在此作业中指定的 NFS 的 。
例如,如果您的 NFS 是 Filestore 文件共享,请指定 Filestore 实例的 IP 地址,您可以通过描述 Filestore 实例来获取该地址。
在远程路径字段中,输入一个可以访问您在上一步中指定的 NFS 的路径。
NFS 目录的路径必须以
/
开头,后跟 NFS 的根目录。在装载路径字段中,输入您在上一步中指定的 NFS (MOUNT_PATH) 的装载路径。
点击完成。
可选:配置此作业的其他字段。
可选:如需查看作业配置,请在左侧窗格中 点击预览。
点击创建。
作业详情页面会显示您创建的作业。
gcloud
如需创建使用
gcloud CLI,请使用
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/
,后跟您选择的目录或路径。 例如,如果您想用 目录中,请将装载路径设置为/mnt/disks/my-nfs
。my-nfs
运行以下命令:
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
替换以下内容:
JOB_NAME
:作业的名称。LOCATION
:作业的位置。JSON_CONFIGURATION_FILE
:JSON 路径 包含作业配置详情的文件。
API
如需创建使用
批处理 API,请使用
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
:作业的装载路径 runnables 用于访问此 NFS路径必须以/mnt/disks/
,后跟您选择的目录或路径。 例如,如果您想用 目录中,请将装载路径设置为/mnt/disks/my-nfs
。my-nfs