python - Apache Beam DirectRunner 与 "normal"并行进程

标签 python google-cloud-platform cloud apache-beam dataflow

我目前有一个在 GCP 上运行的管道。整个过程是使用 pandas 来操作 CSV 并进行一些转换以及来自外部源的侧面输入编写的。 (它使用 bigquery 和存储 API)。事实是,它在 32vCPU/120GB RAM 计算引擎实例 (VM) 上运行,并使用 python 的多处理库进行简单的并行处理。我们目前正在考虑切换到 Dataflow,我想知道的是:如果我使用 Beam 的 DirectRunner 实现相同的管道,与当前实现相比,我应该如何期望性能?它会更快还是更慢,为什么? DirectRunner 会很好地利用所有机器资源还是会受到某种限制?

最佳答案

你的问题很广泛。不过,我会尽力为您提供一些意见。很难比较 DirectRunner 和 DataflowRunner。

  • DirectRunner 在当前虚拟机上启动管道并使用这唯一虚拟机的功能。这是您的虚拟机,您必须对其进行设置、修补,并注意释放磁盘/分区/日志文件,(...)
  • DataflowRunner 将管道启动到托管平台。数据流根据其指标和“预测”(这里没有机器学习!)选择扩大或缩小虚拟机的数量,以尽快执行管道。您可以设置小型虚拟机(例如 1 个 vCPU),数据流将生成很多虚拟机,或者设置更大的虚拟机,并且该数据流可能仅生成 1 个,因为这对于管道来说已经足够了。

专业提示:虚拟机带宽限制为每个 vCPU 2Gbs,最多 8 个 vCPU。照顾好网络瓶颈并明智地选择虚拟机大小(我通常推荐具有 4 或 8 个 vCPU 的虚拟机)

一方面,您只有一个虚拟机需要管理,另一方面,您只需设置参数并让 Dataflow 管理和扩展您的管道。

我不知道您的增长观点,但垂直可扩展性(在单个虚拟机上添加更多 vCPU/内存)每天可能会达到极限。有了Dataflow,它是有弹性的,你不用担心这个;另外还有服务器管理和修补。

最后,回答你的问题“更快还是更慢”,太难回答了...数据流,如果它在多个虚拟机上运行,​​会增加网络延迟、数据流内部管理开销,但可以扩展以并行使用更多 vCPU在某个时间点与您当前的虚拟机进行比较。您的管道是否可以利用这种并行性?它是否解决了您当前的一些瓶颈?我这边很难回答。

关于python - Apache Beam DirectRunner 与 "normal"并行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58809283/

相关文章:

python - 如何迭代 Pandas 数据框的列以运行回归

backup - Google Compute Engine 虚拟机备份策略

google-cloud-platform - Google Cloud VM 实例卡在控制台建议的调整大小上

linux - haproxy重启时出错

python - C2DM Python 框架

python assertRaises 不通过带参数函数的测试

kubernetes - 具有不同 namespace 的k8s istio系统防火墙

Azure VM - 站点无法从外部访问

amazon-web-services - 使用 nginx 向位于云中的 docker 容器发出 http 请求

python - 使用 Python 2.7 在出现字符串的位置拆分文本文件