使用 Dataflow Shuffle 处理批量作业

Dataflow Shuffle 是 Dataflow 转换(例如 GroupByKeyCoGroupByKeyCombine)背后的基础操作。Dataflow Shuffle 操作能够以可伸缩、高效且可容错的方式,按键对数据进行分区和分组。Dataflow Shuffle 功能(仅适用于批处理流水线)可将 shuffle 操作移出工作器虚拟机并移入 Dataflow 服务后端。

默认情况下,批量作业使用 Dataflow Shuffle。

Dataflow Shuffle 的优点

基于服务的 Dataflow Shuffle 具有以下优点:

  • 可以缩短绝大多数流水线作业类型的批处理流水线的执行时间。
  • 可减少在工作器虚拟机上使用的 CPU、内存和 Persistent Disk 存储空间资源。
  • 可实现更好的横向自动扩缩性能,因为虚拟机不再保留任何 shuffle 数据,因此可以更早地缩容。
  • 可提升容错能力;采用这项功能之后,即使保留 Dataflow Shuffle 数据的虚拟机健康状况不佳,也不会导致整个作业失败(未采用此功能时可能就会失败)。

减少的工作器资源主要是通过将 shuffle 工作负载分流到 Dataflow 服务实现的。因此,使用 Dataflow Shuffle 会产生一笔相关费用。执行时间可能因具体运行情况而异。如果您运行的流水线有重要期限,我们建议在期限之前分配足够的缓冲时间。

使用 Dataflow Shuffle

此功能适用于支持 Dataflow 的所有区域。如要查看可用位置,请参阅 Dataflow 位置。如果使用 Dataflow Shuffle,则工作器必须部署在 Dataflow 作业所在的区域。

Java

如果您对流水线使用 Dataflow Shuffle,请勿指定 zone 流水线选项,而应指定 region 并将其值设置为其中一个可用区域。Dataflow 会自动选择指定区域中的可用区。如果您指定了 zone 流水线选项并将其设置为可用区域之外的一个可用区,则 Dataflow 会报告错误。如果您设置的 regionzone 的组合不兼容,则您的作业无法使用 Dataflow Shuffle。

Python

如果您对流水线使用 Dataflow Shuffle,请勿指定 zone 流水线选项,而应指定 region 并将其值设置为其中一个可用区域。Dataflow 会自动选择指定区域中的可用区。如果您指定了 zone 流水线选项并将其设置为可用区域之外的一个可用区,则 Dataflow 会报告错误。如果您设置的 regionzone 的组合不兼容,则您的作业无法使用 Dataflow Shuffle。

Go

如果您对流水线使用 Dataflow Shuffle,请勿指定 zone 流水线选项,而应指定 region 并将其值设置为其中一个可用区域。Dataflow 会自动选择指定区域中的可用区。如果您指定了 zone 流水线选项并将其设置为可用区域之外的一个可用区,则 Dataflow 会报告错误。如果您设置的 regionzone 的组合不兼容,则您的作业无法使用 Dataflow Shuffle。

每个批量作业的默认启动磁盘大小为 25 GB。对于某些批量作业,您可能需要修改磁盘大小。请考虑以下事项:

  • 工作器虚拟机将 25 GB 磁盘空间的一部分用于存储操作系统、二进制文件、日志和容器。使用 Dataflow Shuffle 时,那些占用大量磁盘空间且超出剩余磁盘容量的作业可能会失败。
  • 受限于小型磁盘的性能,使用大量磁盘 I/O 的作业的执行速度可能很慢。如需详细了解磁盘大小之间的性能差异,请参阅 Compute Engine 永久性磁盘性能

如需为 Dataflow Shuffle 作业指定较大的磁盘大小,您可以使用 --disk_size_gb 参数。