DataflowPipelineOptions:在 arg 解析后使用 .setRunner 显式设置运行器

DataflowPipelineOptions: set runner explicitly using .setRunner after arg parsing

在dataflow SDK 2.4.0中,我曾经能够运行:

 PipelineOptionsFactory.register(MyPipelineOptions.class);
 MyPipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().create().as(MyPipelineOptions.class);
 options.setRunner(DataflowRunner.class);

但是,在 Apache Beam SDK 2.9.0 中,我需要使用 --runner=DataflowRunner 在 args 中设置 运行ner,否则它会在 create() 上失败(第二行) .这是期望的行为还是在从 args 读取其他选项后仍然可以使用 setRunner 设置 运行ner?

使用的 Maven 依赖项:

<dependencies>
    <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-sdks-java-core</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
        <version>2.9.0</version>
    </dependency>
</dependencies>

显然,如果在创建选项对象时没有指定运行器,则默认为DirectRunner。因此,即使稍后使用 setRunner 来定义另一个运行器,只是为了能够创建没有指定运行器的选项对象,DirectRunner 也需要在类路径中。

要使其正常工作,您只需添加依赖项即可在类路径中安装 DirectRunner

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-runners-direct-java</artifactId>
  <version>2.9.0</version>
</dependency>