首页 > 解决方案 > 数据流/apache 光束管道中的热键,打开随机播放模式是唯一的解决方案

问题描述

管道用例: 此管道从 30 个 GCS 目录读取 json 文件,每天都表示为一个目录,因此读取过去 30 天的数据(140 亿行)。对该数据进行一些处理并作为 json 文件输出到 GCS。

热键问题: 引入热键问题是因为我们的业务逻辑相对于过去 29 天的数据需要对最近几天的数据(约 4 亿行)进行更多处理。因此,如果管道今天运行,它将读取过去一个月的数据,返回昨天 30 天的数据需要最少的处理。而今天的数据需要大约 100 倍以上的处理。由于我们一步处理了过去一个月的所有数据,包括今天的数据,因此在处理今天的数据时会生成一个热键

在管道最初启动时,我注意到在管道处理了过去 29 天的数据并开始处理今天的数据吞吐量之后,吞吐量非常高(每秒百万行),而今天的数据吞吐量急剧下降(每秒数百行)。由于数据流为每个输入(30 个目录)分配工作节点,因此需要最多处理的输入会停止,因为它没有并行化到所有工作节点。而大多数工作节点用于处理 29 天的数据。

尝试的解决方案:

这里的一个常见建议是启用随机播放模式。我们过去曾尝试过这样做。虽然 shuffle 模式确实提高了GroupByKeystep 的性能,但它在将输出写入 GCS 时显着降低了性能。

标签: google-cloud-dataflowapache-beam

解决方案


推荐阅读