用于批量作业的 Dataflow Shuffle

默认情况下,批处理作业使用 Dataflow Shuffle。 Dataflow Shuffle 会将 Shuffle 操作移出工作器虚拟机并移入 Dataflow 服务后端。

Dataflow Shuffle 简介

  • Dataflow Shuffle 是 Dataflow 转换(例如 GroupByKeyCoGroupByKeyCombine)背后的基础操作。
  • Dataflow Shuffle 操作能够以可伸缩、高效且可容错的方式,按键对数据进行分区和分组。

Dataflow Shuffle 的优势

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

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

支持和限制

  • Dataflow Shuffle 不适用于流式传输作业。
  • 此功能适用于支持 Dataflow 的所有区域。如要查看可用位置,请参阅 Dataflow 位置。区域之间可能存在性能差异。
  • 工作器必须部署在 Dataflow 作业所在的区域。
  • 请勿指定 zone 流水线选项。而应指定 region 并将其值设置为其中一个可用区域。Dataflow 会自动选择您指定区域中的可用区。

    如果您指定了 zone 流水线选项并将其设置为可用区域之外的一个可用区,则 Dataflow 作业会返回错误。如果您设置的 regionzone 的组合不兼容,则您的作业无法使用 Dataflow Shuffle。

  • 对于 Python,Dataflow Shuffle 需要使用 Python 版 Apache Beam SDK 2.1.0 或更高版本。

磁盘大小注意事项

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

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

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

价格

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