PipeLine с несколькими преобразованиями

Я пытаюсь понять жизненный цикл преобразований в конвейере.

У меня есть конвейер с несколькими преобразованиями.

Pipeline p = Pipeline.create(options);
p.apply(TextIO.Read.named("ReadLines").from(inputFile))
            .apply(new ReadData())
            .apply(new Match())
            .apply(new Record())
            .apply(BigQueryIO.Write
                    .to(tableRef)
                    .withSchema(getSchema())
                    .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)
                    .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE));

Внутри каждого из этих преобразований находится один DoFn. Должен ли быть завершен весь пакет, который обрабатывает узел, прежде чем переходить к следующему преобразованию?

Что я наблюдаю, по крайней мере, с DirectPipelineRunner, так это то, что весь набор данных считывается до запуска преобразования сопоставления.


person Jeffrey Ellin    schedule 12.05.2015    source источник


Ответы (1)


С DirectPipelineRunner преобразования выполняются полностью последовательно, как вы заметили. При работе с DataflowPipelineRunner без установленного параметра --streaming многие преобразования могут быть объединены вместе, и все они будут выполняться одновременно. С --streaming данные будут непрерывно передаваться по всему конвейеру, и все преобразования будут активны.

person danielm    schedule 12.05.2015
comment
Можете уточнить одновременно при использовании DataflowPIpelineRunner? - person Jeffrey Ellin; 12.05.2015
comment
Если два преобразования объединены, второе будет обрабатывать каждый выходной элемент первого, как только первое его создаст. - person danielm; 12.05.2015