Dataflow 模板

借助 Dataflow 模板,您可以将流水线暂存在 Google Cloud 上,并使用 Google Cloud Console、gcloud 命令行工具或 REST API 调用运行这些流水线。经典模板作为执行图暂存在 Cloud Storage 上,而 Flex 模板将流水线打包为 Docker 映像,并将这些映像暂存到项目的 Container Registry 中。您可以使用一个 Google 提供的模板,也可以创建自定义模板

与非模板化 Dataflow 部署相比,模板会为您提供更多优势,例如:

  • 您可以在没有开发环境以及非模板化部署中常见的相关依赖项的情况下运行流水线。这可以帮助您有效安排周期性批量作业。
  • 模板将流水线构建(由开发者执行)与流水线运行分开。因此,您无需在每次运行流水线时重新编译代码。
  • 运行时参数允许您自定义流水线运行过程。
  • 非技术用户可以通过 Google Cloud Console、gcloud 命令行工具或 REST API 运行模板。

比较非模板化作业和模板化作业

Dataflow 模板引入了与非模板化作业执行工作流不同的全新开发和执行工作流。模板工作流将开发步骤与执行步骤分开。

无模板的 Dataflow 作业

Apache Beam 流水线开发和作业执行过程通常发生在开发环境中。

非模板化 Dataflow 作业的典型工作流如下:

  1. 开发者创建开发环境并开发其流水线。该环境包括 Apache Beam SDK 和其他依赖项。
  2. 用户从开发环境运行流水线。Cloud Dataflow SDK 将文件暂存在 Cloud Storage 中、创建作业请求文件,并将该文件提交到 Dataflow 服务。

模板 Dataflow 作业

如果您使用经典模板或 Flex 模板,则暂存步骤与执行步骤将分开进行。这种分离可让您更灵活地决定谁可以运行作业以及从何处运行作业。

模板 Dataflow 作业的典型工作流如下:

  1. 开发者创建开发环境并开发其流水线。该环境包括 Apache Beam SDK 和其他依赖项。
  2. 此步骤取决于您所使用的模板类型。
    • 经典模板。开发者运行流水线并创建模板。Apache Beam SDK 在 Cloud Storage 中暂存文件、创建模板文件(类似于作业请求),并将模板文件保存在 Cloud Storage 中。
    • Flex 模板。开发者将流水线打包到 Docker 映像中,然后使用 gcloud 命令行工具构建 Flex 模板规范文件并保存到 Cloud Storage 中。
  3. 其他用户可以使用 Cloud Console、gcloud 命令行工具或 REST API 轻松运行作业,以向 Dataflow 服务提交模板文件执行请求。

此外,您还可以通过 Dataflow 监控界面克隆经典模板作业。克隆作业的提交表单具有预先填充的参数值;不过,在运行作业之前可以修改它们。

如需克隆作业,请执行以下步骤:

  1. 导航到要克隆的作业的作业详情页面。
  2. 点击克隆
  3. 如果需要,请更新作业参数。
  4. 点击运行作业以提交新作业。

如需了解流水线构建和运行的不同阶段(无论是否使用经典版模板或 Flex 模板),请参阅将任何 Dataflow 流水线转换为可重复使用的模板

评估要使用的模板类型

Flex 模板具有比经典模板更大的灵活性,它允许从单个模板启动 Dataflow 作业的细微更改并允许使用任何来源或接收器 I/O。对于经典模板,执行图在模板创建过程中构建。Flex 模板的执行图根据模板执行时由用户提供的运行时参数动态构建。这意味着,使用 Flex 模板时,您可以进行细微更改,从而使用相同的基础模板完成不同的任务,例如更改来源文件或接收器文件格式。

比较模板化作业

下表总结了经典模板和 Flex 模板之间的相似之处和不同之处:
功能 经典模板 Flex 模板
单独的暂存步骤和执行步骤
使用 Google Cloud Console、gcloud 工具或 REST API 调用运行模板
无需重新编译代码即可运行流水线
在无开发环境及相关依赖项的情况下运行流水线
使用运行时参数自定义流水线执行
针对作业图构建运行验证以减少运行时错误
可以在模板创建后更改作业执行图
可以更新流处理作业1
支持 FlexRS1
支持 SQL 参数
支持 ValueProvider 以外的 I/O 接口

注意:

1.如需使用流处理更新或 FlexRS 功能,用户必须使用基础映像版本 20210120_RC00 重新构建他们的 FlexRS 模板。

对于经典模板和 Flex 模板作业,暂存步骤和执行步骤有所不同。但是,两种类型的模板化作业会导致不同的暂存工件。当您使用经典模板时,暂存工件是包含 JSON 序列化执行图的模板。使用 Flex 模板时,暂存工件是包含 JAR 文件或 Python 代码的 Docker 映像。

SDK 版本要求

要创建自己的模板,请确保您的 Apache Beam SDK 版本支持创建模板。

Java:SDK 2.x

如需使用 Java 版 Apache Beam SDK 2.x 创建模板,您必须具备 2.0.0-beta3 或更高版本。

Python

如需使用 Python 版 Apache Beam SDK 2.x 创建模板,您必须具备 2.0.0 或更高版本。

Java:SDK 1.x

如需使用 gcloud 命令行工具运行模板,您必须具备 Cloud SDK 138.0.0 或更高版本。

后续步骤