Apache Beam DirectRunner 与“正常”并行进程
Posted
技术标签:
【中文标题】Apache Beam DirectRunner 与“正常”并行进程【英文标题】:Apache beam DirectRunner vs "normal" parallel processes 【发布时间】:2020-03-07 14:35:51 【问题描述】:我目前有一个在 GCP 上运行的管道。整个过程是使用 pandas 编写的,用于操作 CSV 并进行一些转换,以及来自外部源的辅助输入。 (它使用 bigquery 和存储 API)。问题是,它在 32vCPU/120GB RAM 计算引擎实例 (VM) 上运行,并使用 python 的多处理库进行简单的并行处理。我们目前正在考虑切换到 Dataflow,我想知道的是:如果我要使用 Beam 的 DirectRunner 实现相同的管道,我应该如何期望性能与当前实现的性能相比?它会更快还是更慢,为什么? DirectRunner 会很好地利用所有机器资源还是受到某种限制?
【问题讨论】:
【参考方案1】:你的问题很广泛。但是,我将尝试为您提供一些输入。很难比较 DirectRunner 和 DataflowRunner。
DirectRunner 在您当前的 VM 上启动您的管道并使用此唯一 VM 的功能。这是您的虚拟机,您必须对其进行设置、修补、注意释放磁盘/分区/日志文件,(...) DataflowRunner 将管道启动到托管平台。 Dataflow 根据其指标和“预测”(这里没有 ML!)选择扩大或缩小 VM 的数量以尽快执行您的管道。您可以设置小型虚拟机(例如 1 个 vCPU),Dataflow 会生成很多虚拟机,或者更大的虚拟机,也许该数据流只会生成 1 个虚拟机,因为它对于管道来说已经足够了。专业提示:VM 带宽限制为每个 vCPU 2Gbs,最多 8 个 vCPU。注意网络瓶颈并明智地选择 VM 大小(我通常推荐具有 4 或 8 个 vCPU 的 VM)
一方面,您只需管理一个虚拟机,另一方面,您只需设置参数并让 Dataflow 管理和扩展您的管道。
我不知道您的增长前景,但垂直可扩展性(在单个 VM 上添加更多 vCPU/内存)每天可能会达到极限。使用 Dataflow,它是有弹性的,您不必担心;除了服务器管理和补丁。
最后,回答你的问题“更快或更慢”,太难回答了......数据流,如果它在多个虚拟机上运行,会增加网络延迟,数据流内部管理开销,但可以扩展以并行使用更多 vCPU在某个时间点与您当前的虚拟机进行比较。您的管道是否可以利用这种并行性?它是否解决了您当前的一些瓶颈?我这边太难回答了。
【讨论】:
以上是关于Apache Beam DirectRunner 与“正常”并行进程的主要内容,如果未能解决你的问题,请参考以下文章
请求的身份验证范围不足 - GCP 上的 Dataflow/Apache Beam
JAVA - Apache BEAM- GCP:GroupByKey 与 Direct Runner 一起工作正常,但与 Dataflow runner 一起失败
Apache Beam - org.apache.beam.sdk.util.UserCodeException:java.sql.SQLException:无法创建 PoolableConnecti
在 mac zsh 终端上安装 apache-beam[gcp] 时出错 - “zsh: no match found: apache-beam[gcp]”