【发布时间】:2018-10-20 07:06:00
【问题描述】:
我的管道在 CombineFn 内创建了大型中间数组。当我与少数工人一起运行时,管道会成功。当我增加工作人员的数量时,由于在此步骤中工作人员出现 OOM 错误,管道会失败。我不完全确定为什么会发生这种情况,但我最好的猜测是数据流低估了 add_input 步骤所需的内存量并创建了太多的累加器。
有什么方法可以为管道提供提示,比如每个累加器需要 X MB 内存?
我在here之前发布过这个问题。
我现在使用的是 Apache Beam Python SDK 2.7,但问题仍然存在。
【问题讨论】:
-
我不知道这是否可能。不幸的是,了解幕后情况的唯一方法是支付 GCP 支持费用。但是数据流转换是简单的小步骤。每个 150 MB 的累加器都是有问题的。您需要以某种方式重新设计您的管道,也许将您的 CombineFn 拆分为多个并行运行的 CombineFn,每个 CombineFn 只尝试计算一个统计信息。也许您在 Combine 中进行的一些迭代可以作为管道的一部分来完成。
-
相同的中间数组用于计算每个值。我不认为分散工作会减少峰值内存使用量。尽管现在您提到它,但我会覆盖
add_inputs并让add_input调用它。仅使用add_input效率会降低,但会有助于内存使用。
标签: python google-cloud-dataflow apache-beam