批处理作业工作负载
IBM Cloud® Code Engine 是一个完全受管的无服务器平台,用于运行容器化工作负载,包括批处理作业或应用程序工作负载。 在 Code Engine 中了解如何运行批处理作业。
什么是批处理作业工作负载?
Code Engine 中的作业运行可执行代码的一个或多个实例。 与处理 HTTP 请求的应用程序不同,作业的设计是运行一次就退出,这样就可以释放运行作业工作量的资源。
您可以通过定义多个实例来扩展批处理作业。 可以将工作负载拆分为并行任务,以缩短计算时间。 您可以将作业设置为以自动重试方式运行,以解决作业实例中发生故障的工作负载。 您可以手动,以编程方式以及按事件 (例如 Object Storage 事件) 触发批处理作业。
创建作业时,可以指定每次运行作业时使用的工作负载配置信息。
典型的批处理工作负载包括
- 机器模型训练
- 分析文件,如语音分析或图像识别
- 压缩或解压文件
- 信息存档
创建作业时,可以指定每次运行作业时使用的工作负载配置信息。
批处理作业的生命周期是什么?
当您提交批处理作业时,该作业将运行至完成。 通常,批处理作业会检索输入数据,执行计算工作,并将结果存储在持久数据存储器中。 当批处理作业完成时,将除去用于运行该作业的资源,并且不会对任何备用资源产生任何成本。
什么是工作数组和工作数组状态?
作业数组规格是作业和作业运行配置的一部分。 工作阵列有两个功能:
- 它决定了为运行任务启动的并发实例的数量。
- 它允许用户代码根据提供给它的单个数组索引来确定每个实例应该执行的工作部分。
通过数组大小或数组索引集指定工作数组:
-
如果您指定数组大小_为值n_,那么为运行任务启动的实例数为 n。 使用
JOB_INDEX
环境变量为每个实例提供一个数组索引(从0、1、2开始,依此类推,直到 n-1 )。 除非您指定特定值,否则JOB_ARRAY_SIZE
环境变量将设置为 n。 -
如果您指定一个或多个数组索引,则启动的实例数量就是索引的数量。 通过使用
JOB_INDEX
环境变量,每个实例都分配到一个指定的索引。 除非您指定特定值,否则JOB_ARRAY_SIZE
环境变量将设置为指定索引的数量。
JOB_ARRAY_SIZE
环境变量也可用于用户代码,默认情况下设置为索引数量。
如果一个实例以成功返回代码结束,则关联数组索引的状态将变为已完成。 否则,如果配置的重试次数尚未超过,Code Engine 将为同一索引启动一个新实例。 如果一个实例失败,且不允许重试,则关联数组的索引将其状态更改为失败。
工作岗位与应用程序和功能相比如何?
特性 | 应用程序 | 作业 | 功能 |
---|---|---|---|
执行时间 (持续时间) | 长时间运行 (每个请求 10 分钟) | 长时间运行 (最多 24 小时) | 短时间运行 (2 分钟或更少) |
启动等待时间 | 中 | 调度的开始时间 | 低 |
终止 | 持续运行 | 运行至完成 | 运行至完成 |
调用 | 根据请求或永久运行 | 已安排 | 根据请求,即时 |
编程模型 | 基于容器的构建和执行 | 基于容器的构建和执行 | 特定于语言的源代码文件和依赖关系元数据 |
并行性 | 并行执行,灵活 | 从低到中并行执行 | 高并行执行 |
横向扩展 | 基于请求数 | 基于作业工作负载定义 | 基于事件或直接调用 |
优化对象 | 长期运行,高度复杂的工作负载和随需应变的向外扩展 | 具有高资源需求的已调度或计划工作负载 | 启动时间和快速向外扩展 |
有关更多信息,请参阅 规划 Code Engine。
使用 Code Engine 批处理作业有哪些关键功能?
查看以下主题以了解有关在 Code Engine中使用批处理作业的更多信息。
隔离
Code Engine 是多租户区域服务,其中租户共享相同的网络和计算基础结构。 特别是,网络和计算基础结构是共享资源,某些管理组件是所有租户的公共组件。 但是,租户及其工作负载通过使用 Code Engine 项目相互隔离。Code Engine 阻止项目之间的通信,从而为多租户环境中的应用程序提供隔离。 此外,还有在资源级别上执行的访问控制,以仅允许授权用户对项目资源 (例如应用程序或其他 Code Engine 工作负载) 执行某些操作。
有关工作负载隔离的更多信息,请参阅 Code Engine 工作负载隔离。
日志记录
在控制台中启用日志功能处理 "Code Engine作业时,日志会被转发到与 "Code Engine项目相关联的 "IBM Cloud Logs服务实例。 在IBM Cloud Logs服务实例中,日志被编入索引,可对所有生成的信息进行全文检索,并根据特定字段进行便捷查询。 请参阅 获取作业的日志。
系统事件信息还有助于在运行作业时对问题进行故障诊断。 您可以使用 CLI 查看系统事件信息。 请参阅 获取作业的系统事件信息。
有关更多信息,请参阅查看日志。
正在排队
已提交的批处理作业将自动排队并处于暂挂状态,直到分派为止。 批处理作业根据 Code Engine 项目定义的可用计算资源运行。 可以从队列中除去处于 pending
状态的批处理作业。 您可以使用 Code Engine 控制台或命令行界面来监视暂挂,正在运行或已完成的批处理作业。
重试次数
每个作业实例运行至完成。 但是,工作负载代码在作业运行期间可能会迂到错误。 当作业实例使用非零返回码完成时,Code Engine 将重新启动作业实例。 通过 Code Engine,可以指定限制重试次数以避免重新启动失败的作业实例。
运行批处理作业
无论您的代码是作为本地文件或 Git 存储库中的源存在,还是您的代码是存在于公共或专用注册表中的容器映像,Code Engine 都为您作为作业运行代码提供了简化的方法。
您可以通过以下方式在 Code Engine 中创建和运行批处理作业:
- 运行现有的容器镜像。 创建作业并提供要在提交作业时使用的映像的引用。 有关示例,请参阅 创建并运行作业。
- 从源代码开始。 如果您是从位于 Git 存储库中或本地工作站上的源代码开始,那么可以指向源位置,而 Code Engine 负责为您构建映像。 请参阅 从存储库源代码创建作业 和 从本地源代码创建作业。
有关更多信息,请参阅 使用作业。
缩放
Code Engine (批处理作业) 中的作业由一个或多个作业实例组成。 当作业实例相互独立运行时,它们将运行相同的代码。 假设您有一个数据库,其中包含 100 条要分析的记录。 您可以运行作业,使每个作业实例分析 10 个记录。 例如,第一个作业实例分析记录 0-9,第二个作业实例可以分析记录 10-19,依此类推。 在此示例中,每个作业实例都会接收系统提供的作业输入参数 JOB_INDEX
,作为可用于计算每个作业实例要分析的数据库记录范围的环境变量。
在提交批处理作业时指定作业实例数。
当您运行批处理作业时,在启动期间,作业实例可能会在启动实例时处于暂挂状态。 作业实例的暂挂时间可能因系统和网络基础结构而异,因为系统会进行调整以满足与此作业运行相关的资源需求。 如果系统基础结构正在响应高使用率需求,那么结果可能是作业的启动延迟多分钟,因为作业实例是即时供应的。
状态
当完成所有作业运行实例时,批处理作业处于 Succeeded
状态。
在一个或多个作业运行实例达到重试限制后,批处理作业处于 Failed
状态。 此外,如果作业需要太长时间才能完成,那么只要达到最大执行时间,该作业将处于 Failed
状态。 有关更多信息,请参阅 作业状态。
提交类似的批处理作业
创建作业时,可以指定每次运行作业时使用的工作负载配置信息。 当您对批处理作业使用一组公共配置信息时,通过 Code Engine,可以使用作业提交来指定其他参数,以覆盖此特定作业提交的批处理作业参数。
触发具有事件的批处理作业
可以根据事件 (例如,定期计时器,Object Storage 事件或 Kafka 主题) 自动提交批处理作业。
假设您希望根据对 IBM Cloud Object Storage 存储区的预订自动触发批处理作业,每当文件更改或添加到 Object Storage 存储区时,该存储区都会生成事件。 查看 Code Engine cos-event-job
样本,以获取有关如何创建
Object Storage 事件并使用这些事件来触发批处理作业的信息。
有关将事件与 Code Engine 作业配合使用的更多信息,请参阅以下主题: 使用定期计时器(cron)事件生产者,使用 IBM Cloud Object Storage 事件生产者 和 使用 Kafka 事件生产者。
要查找更多代码示例吗? 请查看 样本 IBM Cloud Code Engine GitHub 存储库。
如何开始使用批处理作业?
要使用 icr.io/codeengine/firstjob
样本映像创建并运行简单的 Code Engine 批处理作业应用程序,请参阅 运行第一个 Code Engine 作业。
此外,您还可以尝试批处理作业教程,请参阅 运行和更新作业。
要深入了解如何使用批处理作业,请参阅 使用作业和作业运行。