我正在尝试google云的数据流服务,这对于高效的计算时间非常有用。我的代码对于数据流管道有以下编程模型:
start=(p =“阅读”>> beam.io.ReadFromText("gcs路径“)) end= start \ "data_generation“>> beam.Pardo(PerfromFunction)
我在做什么:
PerformFunction是一个常规的Python函数,它包含了一系列用于数据生成的函数。我的问题是,当我在单个处理器上运行n1-standard-16的常规VM上时,大约需要1小时才能完成整个过程。
为什么我选择了Dataflow:
然后,我决定使用Dataflow,其中ParDo函数执行给定函数的Multi-Threading,显然将计算时间从1小时减少到less than 1 hour。
问题:
在使用上述编程模型运行Dataflow作业之后,我开始意识到,在GCP上,Dataflow仍然需要大约1小时才能完成被称为wall-time的整个过程。然后,我登录到工作机器,并看到使用命令htop的资源利用率,发现机器只使用一个处理器,平均使用率为60%。
预期结果或建议:
PS-由于一些协议,我无法共享代码。多谢您的理解。另外,如果我在某个时候错误地理解了数据流,请纠正我。
发布于 2019-05-29 21:50:45
Apache和Dataflow能够基于输入并行化计算。
如果您有一个单一的计算应用,而这个计算需要一个小时,那么梁将无法加快您的计算。如果需要对不同的元素(或数据点)多次应用相同的计算,Beam可以帮助您。
您还应该考虑诸如以分布式方式运行计算的开销(数据复制、网络调用等)。
因此,要回答您的问题: GCS文件中的单个“数据点”(多少行)是如何存在的?是否有可能对每一个计算进行并行化?要花多长时间来处理每一件?
https://stackoverflow.com/questions/56313281
复制相似问题