使用Dataflow的处理偏向于一个节点

问题描述 投票:0回答:1

处理不由DataFlow分发,而是由一个节点处理。

我创建了以下程序并验证它是否可以正常使用小数据。

从BigQuery读取数据→Dofn处理→组合处理→展平处理→组合处理→展平处理→将数据写入Bigquery。

接下来,我将测试大数据,它在多节点并行环境中工作。

在Dataflow启动时将numWorkers--autoscalingAlgorithm = NONE指定为可选参数。

由于执行需要很长时间,我将进行调查。

  • 我用Dataflow的作业视图检查了执行情况。处理组合需要时间。
  • 检查GCE VM实例上的计算机指标。一台计算机正在消耗和运行资源,而其他计算机处于空闲状态。
  • StackDriver的日志。 Combine流程中的addInput流程正在一台活动计算机上执行,该计算机之前使用指标进行了检查。
  • 当我查看StackDriver中的其他日志时,我偶尔会在空闲计算机上看到“丢弃无效工作项”消息。

顺便说一句,如果我没有指定启动选项numWorkers--autoscalingAlgorithm = NONE,即自动缩放,则只会启动一个节点。

Dataflow认为根据波束成语编写程序将以“良好”的方式分发给许多节点,但它的工作方式与预期不同。

它如何运作良好?

google-cloud-platform google-cloud-dataflow apache-beam
1个回答
0
投票

我做的!好极了!谢谢!!

p.apply("ReadFromBQ",BigQueryIO.readTableRows().fromQuery(query).usingStandardSql().withTemplateCompatibility())
.apply("shuffle as expressly", Reshuffle.viaRandomKey())
.apply("convert table row", ........
© www.soinside.com 2019 - 2024. All rights reserved.