对于谷歌云数据流,是否可以从管道启动另一个管道。

时间:2017-01-09 03:33:02

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

我正在尝试设置谷歌云数据流管道(流媒体模式),读取pubsub主题消息,从已发布的消息中提取信息(谷歌云存储中的对象名称),然后启动另一个管道(批处理模式)来处理存储在其中的对象谷歌云存储。

是否可以在管道中启动另一个管道???

2 个答案:

答案 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的扩展。