默认情况下,批量作业使用 Dataflow Shuffle。Dataflow Shuffle 可将 shuffle 操作从工作器虚拟机中移出并移入 Dataflow 服务后端。
关于 Dataflow Shuffle
- Dataflow Shuffle 是 Dataflow 转换(例如
GroupByKey
、CoGroupByKey
和Combine
)背后的基础操作。 - Dataflow Shuffle 操作能够以可扩缩、高效且可容错的方式,按键值对数据进行分区和分组。
Dataflow Shuffle 的优点
基于服务的 Dataflow Shuffle 具有以下优点:
- 可以缩短绝大多数流水线作业类型的批处理流水线的执行时间。
- 可减少在工作器虚拟机上使用的 CPU、内存和 Persistent Disk 存储空间资源。
- 可实现更好的横向自动扩缩性能,因为虚拟机不再保留任何 shuffle 数据,因此可以更早地缩容。
- 可提升容错能力,因为即使保留 Dataflow Shuffle 数据的虚拟机健康状况不佳,也不会导致整个作业失败。
支持和限制
- Dataflow Shuffle 不适用于流处理作业。
- 此功能适用于支持 Dataflow 的所有区域。如要查看可用位置,请参阅 Dataflow 位置。区域之间可能存在性能差异。
- 工作器必须部署在与 Dataflow 作业相同的区域。
请勿指定
zone
流水线选项,而应指定region
并将其值设置为其中一个可用区域。Dataflow 会自动选择指定区域中的可用区。如果您指定了
zone
流水线选项并将其设置为可用区域之外的一个可用区,则 Dataflow 作业会返回错误。如果您设置的region
和zone
的组合不兼容,则您的作业无法使用 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 会产生一笔相关费用。执行时间可能因具体运行情况而异。如果您运行的流水线有重要期限,我们建议在期限之前分配足够的缓冲时间。