【问题标题】:Google cloud dataflow provide memory hints to pipeline谷歌云数据流向管道提供内存提示
【发布时间】: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


【解决方案1】:

我能够通过在add_input 函数中创建并立即删除一个比我的中间大小稍大的数组来解决此问题。在不了解 Google 内部情况的情况下,很难说为什么会这样,如果我继续增加工人数量,我可能会再次遇到同样的问题。但是,如果其他人遇到同样的问题,请尝试一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    相关资源
    最近更新 更多