一个数据流作业中的并行管道

时间:2019-07-19 08:46:51

标签: java google-cloud-platform google-cloud-dataflow gcloud dataflow

我想在GCP的一个Dataflow作业中运行两个并行的管道。我已经创建了一个管道,它可以正常工作,但是我想创建另一个管道而不创建另一个作业。

我已经搜索了很多答案,但是找不到任何代码示例:(

如果我这样运行它是行不通的:

pipe1.run();
pipe2.run();

它给我:“已经有一个有效的工作名称...如果要提交第二份工作,请尝试再次使用--jobName设置一个不同的名称”

1 个答案:

答案 0 :(得分:0)

您可以将其他输入应用于管道,这将导致一项作业中的管道分离。例如:

public class ExamplePipeline {

public static void main(String[] args) {
    PipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().create();
    options.setRunner(DirectRunner.class);

    Pipeline pipeline = Pipeline.create(options);

    PCollection<String> linesForPipelineOne = pipeline.apply(Create.of("A1", "B1"));
    PCollection<String> linesToWriteFromPipelineOne = linesForPipelineOne.apply("Pipeline 1 transform",
            ParDo.of(new DoFn<String, String>() {

        @ProcessElement
        public void processElement(ProcessContext c) {
            System.out.println("Pipeline one:" + c.element());
            c.output(c.element() + " extra message.");
        }

    }));
    linesToWriteFromPipelineOne.apply((TextIO.write().to("file.txt")));

    PCollection<String> linesForPipelineTwo = pipeline.apply(Create.of("A2", "B2"));
    linesForPipelineTwo.apply("Pipeline 2 transoform",
            ParDo.of(new DoFn<String, String>() {

        @ProcessElement
        public void processElement(ProcessContext c) {
            System.out.println("Pipeline two:" + c.element());
        }

    }));

    pipeline.run();
}

如您所见,您还可以将两个(或更多)分离的PBegin应用于具有多个PDone /接收器的管道。在此示例中,"pipeline 1"转储并将输出写入文件,而"pipeline 2"仅将输出转储到屏幕。

如果您在GCP上使用DataflowRunner运行此命令,GUI将显示2条未连接的“管道”。