Google Cloud Dataflow:数据流编程模型的计算时间与普通 VM 机器上的计算时间相同吗?

Posted

技术标签:

【中文标题】Google Cloud Dataflow:数据流编程模型的计算时间与普通 VM 机器上的计算时间相同吗?【英文标题】:Google Cloud Dataflow: Dataflow programming model taking same computational time as it would take on a regular VM machine? 【发布时间】:2019-10-12 06:35:41 【问题描述】:

我正在尝试谷歌云的数据流服务,该服务对于高效计算时间很有用。我的代码具有以下数据流管道的编程模型:

start=(p | "read" >> beam.io.ReadFromText("gcs path")) 结束=开始| "data_generation" >> beam.Pardo(PerfromFunction)

我在做什么: PerformFunction 是一个常规的 Python 函数,其中包含一些用于数据生成目的的函数。我的问题是,当我在单个处理器上n1-standard-16 的常规 VM 上运行此功能时,完成整个过程大约需要 1 小时。

我为什么选择 Dataflow: 然后我决定使用 Dataflow,其中 ParDo 函数执行给定函数的 Multi-Threading,显然将计算时间从 1 小时减少到 less than 1 hour

问题: 在使用上述编程模型运行 Dataflow 作业后,我意识到 Dataflow 仍然需要大约 1 小时才能完成整个过程,这在 GCP Dataflow UI 上被称为wall-time。然后我登录到worker机器,使用命令htop查看资源利用率,发现机器只使用了一个处理器,平均使用率为60%。

预期结果或建议: 1. Dataflow worker Cluster 可以做多处理吗? 2. 我的编程模型是不是非常有限和错误? 3. ParDo 函数似乎并没有像预期的那样减少计算时间,你认为我在这里做错了什么?

PS- 由于某些协议,我无法共享代码。谢谢你的理解。如果我在某些时候错误地理解了数据流,也请纠正我。

【问题讨论】:

您的 GCS 路径中的文件有多大? 【参考方案1】:

Apache Beam 和 Dataflow 能够根据传入的输入并行化您的计算。

如果您要应用单个计算,并且该计算需要一小时,那么 Beam 将无法加快您的计算速度。如果您需要对不同的元素(或数据点)多次应用相同的计算,Beam 可以为您提供帮助。

您还应该考虑诸如以分布式方式运行计算的开销(数据复制、网络调用等)。

所以,为了能够回答您的问题:您的 GCS 文件中有多少单独的“数据点”(多少行)?是否可以并行计算每一个?每个处理需要多长时间?

【讨论】:

所以,根据我的理解,如果我有一个大数据可以保留在 RAM 中,而我有巨大的计算 CPU 利用率(可能是很多操作),那么只有它会在 Pardo 中扩展自己吗?这是否意味着我需要消耗 CPU 利用率?回答您的问题:我有一个 CSV 文件,其中包含 1000 个数据点,并且在 ParDo 类中一次处理一个。处理每个元素大约需要一分钟。我注意到工人的内存线束,它几乎没有达到 500MB。

以上是关于Google Cloud Dataflow:数据流编程模型的计算时间与普通 VM 机器上的计算时间相同吗?的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud DataFlow 随机化 WritetoBigQuery

Google Cloud DataFlow 作业尚不可用.. 在 Airflow

用于 NRT 数据应用的 Google Cloud DataFlow

到 Cloud Bigtable 的 Google Cloud Dataflow 管道中的异常

Apache Beam/Google Dataflow - 将数据从 Google Datastore 导出到 Cloud Storage 中的文件

Google Cloud Dataflow ETL(数据存储区 -> 转换 -> BigQuery)