【问题标题】:Why DirectRunner is not executing steps from pipeline, while DataflowRunner it works为什么 DirectRunner 不执行管道中的步骤,而 DataflowRunner 它可以工作
【发布时间】:2021-09-24 11:29:01
【问题描述】:

我有一个简单的管道,只有一个窗口功能。步骤如下:

  • 从 pubsub 读取
  • 调试步骤(打印 aaa)
  • 窗口 10 秒
  • 调试步骤(打印 bbb)
  • TextIO.writeDynamic 到 gcs。

而且,在 Dataflow 上,我收到了非常好的调试消息,因此我知道窗口函数之后的步骤是正确执行的。

但是,我需要在本地调试东西,不幸的是我的窗口后的“调试步骤”根本没有执行。没有消息,没有附加调试器。没有。每隔一段时间它就会处理一个窗口,但感觉很不稳定。

这是什么原因?很多年前,当 Dataflow 处于早期阶段时,我已经看到了这个问题,现在,4 年后,它仍然是一个问题。也许我做错了什么?

【问题讨论】:

  • 本地是什么意思?你能提供更多关于测试环境的细节吗?

标签: java google-cloud-dataflow apache-beam


【解决方案1】:

不要在 Dataflow 中使用 print。改用记录器:

import logging

logging.getLogger().setLevel(logging.DEBUG)

您可以在 DoFn 中使用 logging.debug()

class JustPrintSomething (beam.DoFn):

   def process (self, stuff):
      logging.debug(f"Stuff received: f{stuff}")
      yield stuff

这应该将 DirectRunner 中的消息发送到标准输出。如果您使用 Dataflow,您将在 Stackdriver 中收到日志消息。

【讨论】:

  • 嗯,确实。如果想查看某些内容,应该使用日志记录。但是,这个问题是 1)关于 java,2)关于根本不执行步骤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多