我使用Google Cloud Dataflow SDK编写了一个流媒体管道,但我想在本地测试我的管道。我的管道从Google Pub / Sub获取输入数据。
是否可以使用DirectPipelineRunner(本地执行,而不是Google Cloud)运行访问Pub / Sub(pubsubIO)的作业?
我以普通用户帐户登录时遇到了权限问题。我是项目的所有者,我正在尝试访问pub / sub主题。
答案 0 :(得分:3)
InProcessPipelineRunner是Dataflow 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不支持无界数据源。因此,您必须像这样设置maxReadTime
或maxNumRecords
:
PubsubIO.Read.topic("projects/<project-id>/topics/<topic>").maxNumRecords(1000);
从Cloud Pub / Sub流中连续读取的PTransform 返回包含流中项目的字符串的PCollection。 使用仅支持有界的PipelineRunner运行时 PCollections(例如DirectPipelineRunner),只是有限部分 可以处理输入的Pub / Sub流。因此,要么 PubsubIO.Read.Bound.maxNumRecords(int)或 必须设置PubsubIO.Read.Bound.maxReadTime(Duration)。