【发布时间】:2019-09-21 16:04:07
【问题描述】:
我已经使用 Beam 有一段时间了,我想知道编写高效和优化的 Beam 管道的关键概念是什么。
我有一点 Spark 背景,我知道我们可能更喜欢使用 reduceByKey 而不是 groupByKey 来避免洗牌和优化网络流量。
Beam也一样吗?
我会很感激一些提示或材料/最佳实践。
【问题讨论】:
标签: google-cloud-dataflow apache-beam
我已经使用 Beam 有一段时间了,我想知道编写高效和优化的 Beam 管道的关键概念是什么。
我有一点 Spark 背景,我知道我们可能更喜欢使用 reduceByKey 而不是 groupByKey 来避免洗牌和优化网络流量。
Beam也一样吗?
我会很感激一些提示或材料/最佳实践。
【问题讨论】:
标签: google-cloud-dataflow apache-beam
需要考虑的一些事项:
先归档;将过滤器操作放在 DAG 中尽可能高的位置)
尽早合并;如果可以选择何时合并,请尽早进行。
如果可能,通过在大滑动窗口之前使用较小的固定窗口来减少大滑动窗口的影响。 FixedWindow.of(1m) |结合 | SlidingWindow.of(6 小时)
大多数跑步者都会支持图融合,这在 99% 的情况下都是正确的。但在大规模扇出变换的情况下,您应该中断融合。
对于一般的键
高级关键提示:
使用选项标志可以轻松读取压缩文件,但是如果没有 Offset TextIO 则无法分发此任务。如果您有非常大的文件要读取,在启动管道之前解压缩文件可以提供很好的性能提升。还要考虑使用压缩 Avro 等格式。
BackPressure:横梁式导轨设计为能够快速完成并行工作。他们可以在许多机器上启动许多线程来实现这一目标。这很容易淹没外部系统,尤其是在您进行每个元素的 RPC 调用时。如果外部系统无法扩展,请使用 startBundle / finishBundle 创建批次以帮助提高每秒调用次数
光速,仍然是光速。:-) 避免使用远离工作人员的水槽和光源。
【讨论】: