Google Cloud Dataflow:使用DirectPipelineRunner(本地作业)访问Google Cloud Pub / Sub管道?

时间:2015-04-07 21:36:18

标签: google-cloud-dataflow google-cloud-pubsub

我使用Google Cloud Dataflow SDK编写了一个流媒体管道,但我想在本地测试我的管道。我的管道从Google Pub / Sub获取输入数据。

是否可以使用DirectPipelineRunner(本地执行,而不是Google Cloud)运行访问Pub / Sub(pubsubIO)的作业?

我以普通用户帐户登录时遇到了权限问题。我是项目的所有者,我正在尝试访问pub / sub主题。

4 个答案:

答案 0 :(得分:3)

InProcessPipelineRunnerDataflow SDK for Java 1.6.0中引入的DirectPipelineRunner的新版本,其中包括对无界PCollections的支持。

(注意:在Apache Beam中,此功能已添加到DirectRunner中,但在Dataflow SDK for Java中,我们无法在2.0之前执行此操作,因为更好地检查模型可能会导致其他测试失败,我们考虑向后不兼容的更改。因此暂时添加了伴随的InProcessPipelineRunner。)

还有一些很棒的新support用于测试迟到和无序数据。

答案 1 :(得分:2)

DirectPipelineRunner目前不支持PubsubIO。在本地使用时,您将收到一条错误消息,指出“没有为PubsubIO.Read注册评估者”。

您的许可问题很可能来自其他来源。

答案 2 :(得分:0)

只是为了帮助那些会搜索这个的人,

使用最新版本,您可以执行此操作。如果要在本地运行管道,请使用“DirectRunner”在本地运行此管道。使用“DataflowRunner”在云中运行它。

设置分段位置和跑步者,如下所示。

streamingOption.setStagingLocation(PipelineConstants.PUBSUB_STAGING_LOCATION);

streamingOption.setRunner(DataflowRunner.class);

或将其作为参数传递。

您能否详细说明您所面临的许可问题?

答案 3 :(得分:-1)

实际上它是可能的,但DirectPipelineRunner不支持无界数据源。因此,您必须像这样设置maxReadTimemaxNumRecords

PubsubIO.Read.topic("projects/<project-id>/topics/<topic>").maxNumRecords(1000);

来自PubSub documentation

  

从Cloud Pub / Sub流中连续读取的PTransform   返回包含流中项目的字符串的PCollection。   使用仅支持有界的PipelineRunner运行时   PCollections(例如DirectPipelineRunner),只是有限部分   可以处理输入的Pub / Sub流。因此,要么   PubsubIO.Read.Bound.maxNumRecords(int)或   必须设置PubsubIO.Read.Bound.maxReadTime(Duration)。