我正在尝试设置谷歌云数据流管道(流媒体模式),读取pubsub主题消息,从已发布的消息中提取信息(谷歌云存储中的对象名称),然后启动另一个管道(批处理模式)来处理存储在其中的对象谷歌云存储。
是否可以在管道中启动另一个管道???
答案 0 :(得分:1)
除此之外没有任何技术理由。您需要确保将Pipeline对象分开,具有足够的Compute Engine配额来启动您需要的所有作业。
答案 1 :(得分:0)
我们让它发挥作用。这样做:
private static class ExecuteUpdateTaskFroNamespace extends DoFn<String, String> {
@Override
public void processElement(ProcessContext c) throws Exception {
String namespace = c.element();
LOG.info("Processing namespace: " + namespace);
BasicOptions options = c.getPipelineOptions().cloneAs(BasicOptions.class);
EntityOptions entityOptions = PipelineOptionsFactory.as(EntityOptions.class); // important to NOT use .create()
entityOptions.setNamespace(namespace);
entityOptions.setProject(options.getProject());
entityOptions.setRunner(DataflowPipelineRunner.class);
entityOptions.setStagingLocation(options.getStagingLocation());
entityOptions.setKind("DocsAsset");
try {
Pipeline p = Pipeline.create(entityOptions);
p.apply("Read from Datastore", BcDatastoreReadFactory.getEntitySource(entityOptions))
.apply("Find Old Site Entities", ParDo.of(new FindEntities()))
.apply("Transform Entities", ParDo.of(new TransformEntities()))
.apply("Save", DatastoreIO.v1().write().withProjectId(entityOptions.getProject()));
p.run();
LOG.info("Submitted UpdateAssetsSitesMimeType job for namespace: " + namespace);
c.output("Submitted UpdateAssetsSitesMimeType job for namespace: " + namespace);
} catch (Exception e) {
LOG.warn("Unable to create pipeline for namespace: " + namespace, e);
}
}
}
问题:如果没有达到配额,你不能一次产生超过25个,为了绕过它你可以将setRunner(DataflowPipelineRunner.class)更改为setRunner(BlockingDataflowPipelineRunner.class)。但是在2.0.0中删除了BlockingDataflowPipelineRunner
EntityOptions和BasicOptions是PipelineOptions的扩展。