使用 Dataflow 可移植 Runner

使用 Dataflow 运行流水线时,Dataflow Runner 会将流水线代码和依赖项上传到 Cloud Storage 存储桶并创建 Dataflow 作业。此 Dataflow 作业在 Google Cloud中的托管式资源上运行流水线。

  • 对于使用 Apache Beam Java SDK 2.54.0 或更高版本的批处理流水线,Portable Runner 默认处于启用状态。
  • 对于使用 Apache Beam Java SDK 的流水线,在运行多语言流水线、使用自定义容器,或者使用 Spanner 或 Bigtable 变更数据流流水线时,Portable Runner 是必需的。对于大规模 Java 流处理流水线,请使用 Streaming Java(默认)Runner。
  • 对于使用 Apache Beam Python SDK 2.21.0 或更高版本的流水线,Portable Runner 默认处于启用状态。对于使用 Apache Beam Python SDK 2.45.0 版及更高版本的流水线,Dataflow Portable Runner 是唯一可用的 Dataflow 运行程序。
  • 对于 Go 版 Apache Beam SDK,Portable Runner 是唯一可用的 Dataflow 运行程序。

Portable Runner 使用基于服务的架构,这对许多流水线有利:

局限和限制

Dataflow Portable Runner 有以下要求和限制:

  • 仅限 Portable Runner 的功能 :以下功能仅在 Portable Runner 上受支持:
    • 托管转换RunInference在 Java 中。
    • 自定义容器。
    • 基于 ARM 的工作器虚拟机。
    • 可拆分 DoFn。我们正在探索对 Non-Portable Runner 的支持。
  • Dataflow Portable Runner 需要将 Streaming Engine 用于流处理作业。
  • 由于 Dataflow Portable Runner 需要 Streaming Engine 来流式传输作业,因此任何需要 Dataflow Portable Runner 的 Apache Beam 转换还需要使用 Streaming Engine 来流式传输作业。例如,Pub/Sub Lite I/O 连接器 (适用于 Python 版 Apache Beam SDK)是一种需要 Dataflow Portable Runner 的跨语言转换。如果您尝试为使用此转换的作业或模板停用 Streaming Engine,则作业将失败。
  • 对于使用 Apache Beam Java SDK 的流处理流水线,Portable Runner 不支持 MapStateSetState 类。如需将 MapStateSetState 类与 Java 流水线搭配使用,请启用 Streaming Engine,停用 Portable Runner,并使用 Apache Beam SDK 2.58.0 或更高版本。
  • 对于使用 Apache Beam Java SDK 的批处理和流处理流水线,不支持 类 AfterSynchronizedProcessingTime
  • 虽然在许多情况下,Portable Runner 的扩缩能力优于 Non-Portable Runner,但对于固定分片,其内存用量可能会更高。
  • Dataflow 经典 模板无法使用与构建时不同的 Dataflow Runner 版本运行。这意味着,Google 提供的经典模板无法启用 Portable Runner。如需为自定义模板启用 Portable Runner,请在构建模板时设置相应的标志。此标志取决于您使用的 SDK 版本:
    • Beam SDK 2.74 及更高版本:--experiments=enable_portable_runner
    • Beam SDK 2.73 及更低版本:--experiments=use_runner_v2
  • 由于存在已知的自动扩缩问题,对于需要有状态处理的批处理 Java 流水线,Portable Runner 默认处于停用状态。 您仍然可以为这些流水线启用 Portable Runner(请参阅 启用 Portable Runner),但流水线 性能可能会严重受限。

  • 在某些流水线中,Portable Runner 可能会增加一致性失败的频率。您可能会在日志文件中看到以下错误消息:“Internal consistency check failed, the output is likely incorrect. Please retry the job”。一种可能的缓解措施是在 Join/GrouByKey 步骤之后添加 Reshuffle 转换。如果无法容忍这样的失败率,并且 缓解措施无法解决问题,请尝试 停用 Portable Runner

启用 Portable Runner

如需启用 Dataflow Portable Runner,请按照 Apache Beam SDK 的配置说明进行操作。

Java

Dataflow Portable Runner 需要使用 Apache Beam Java SDK 2.30.0 或更高版本,建议使用 2.44.0 版或更高版本。

对于使用 Apache Beam Java SDK 2.54.0 或更高版本的批处理流水线,Portable Runner 默认处于启用状态。

如需启用 Portable Runner,请在运行作业时使用与您的 Beam SDK 版本和流水线类型对应的实验值:

  • Beam SDK 2.74 及更高版本:enable_portable_runner(批处理)或 enable_streaming_java_runner(流处理)。
  • Beam SDK 2.73 及更低版本:use_runner_v2

如需了解详情,请参阅 设置实验性流水线选项

Python

对于使用 Apache Beam Python SDK 2.21.0 或更高版本的流水线,Portable Runner 默认处于启用状态。

Apache Beam Python SDK 2.20.0 及更低版本不支持 Dataflow Portable Runner。

在某些情况下,虽然流水线在受支持的 SDK 版本上运行,但流水线可能不使用 Portable Runner。如需使用 Portable Runner 运行作业,请设置与您的 Beam SDK 版本对应的实验值:

  • Beam SDK 2.74 及更高版本:enable_portable_runner
  • Beam SDK 2.73 及更低版本:use_runner_v2

如需了解详情,请参阅 设置实验性流水线选项

Go

Dataflow Portable Runner 是唯一适用于 Go 版 Apache Beam SDK 的 Dataflow 运行程序。Portable Runner 默认处于启用状态。

停用 Portable Runner

如需停用 Dataflow Portable Runner,请按照 Apache Beam SDK 的配置说明进行操作。

Java

如需停用 Portable Runner,请设置与您的 Beam SDK 版本对应的实验值:

  • Beam SDK 2.74 及更高版本:disable_portable_runner
  • Beam SDK 2.73 及更低版本:disable_runner_v2

这会将作业默认设置为 Non-Portable Runner(对于流处理,则为 Streaming Java Runner)。如需了解详情,请参阅设置实验性 流水线 选项

Python

Apache Beam Python SDK 2.45.0 版及更高版本不支持停用 Portable Runner。

对于早期版本的 Python SDK,如果您的作业被标识为使用 auto_runner_v2 实验,您可以通过设置 disable_runner_v2 实验来停用 Portable Runner。如需了解详情,请参阅设置实验性 流水线 选项

Go

无法在 Go 中停用 Dataflow Portable Runner。Portable Runner 是唯一适用于 Go 版 Apache Beam SDK 的 Dataflow 运行程序。

监控作业

使用监控界面可查看 Dataflow 作业指标,例如内存利用率、CPU 利用率等。

您可以通过 Logs ExplorerDataflow 监控界面获取工作器虚拟机日志。工作器虚拟机日志包括来自运行程序自动化测试框架进程的日志和来自 SDK 进程的日志。 您可以使用虚拟机日志来排查作业问题。

排查 Portable Runner 问题

如需使用 Dataflow Portable Runner 排查作业问题,请按照 标准流水线问题排查步骤进行操作。 以下列表提供了有关 Dataflow Portable Runner 工作原理的其他信息:

  • 使用 Dataflow Portable Runner 的作业在工作器虚拟机上运行两种类型的进程:SDK 进程和运行程序自动化测试框架进程。根据流水线和虚拟机类型,可能有一个或多个 SDK 进程,但每台虚拟机只有一个运行程序自动化测试框架进程。
  • SDK 进程运行用户代码和其他特定于语言的功能。运行程序自动化测试框架进程管理其他一切。
  • 在开始从 Dataflow 请求工作之前,运行程序自动化测试框架进程会等待所有 SDK 进程与其连接。
  • 如果工作器虚拟机在 SDK 进程启动期间下载并安装依赖项,则作业可能会延迟。 如果在 SDK 过程中(例如启动或安装库时)出现问题,则工作器会将其状态报告为运行状况不佳。如果启动时间增加,请在项目上启用 Cloud Build API,并使用以下参数提交您的流水线:--prebuild_sdk_container_engine=cloud_build
  • 由于 Dataflow Portable Runner 使用检查点,因此每个工作器可能会在缓冲更改时等待长达 5 秒,然后再发送更改以进行进一步处理。因此,预计延迟时间约为 6 秒。
  • 如需诊断用户代码中的问题,请检查来自 SDK 进程的工作器日志。如果在运行程序自动化测试框架日志中发现任何错误,请与支持团队联系以提交错误。
  • 如需调试与 Dataflow 多语言流水线相关的常见错误,请参阅多语言流水线提示指南。