代码之家  ›  专栏  ›  技术社区  ›  bjorndv

DataFlowPipelineOptions:在arg分析后使用.setRunner显式设置Runner

  •  0
  • bjorndv  · 技术社区  · 5 年前

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

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

    但是,在ApacheBeamSDK2.9.0中,我需要使用 --runner=DataflowRunner ,否则它将失败 create() (第二行)。这是期望的行为还是仍有方法设置运行者使用 setRunner 从args中读取其他选项后?

    使用的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>
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   rilla    5 年前

    显然,如果在创建选项对象时未指定运行程序,则默认为DirectRunner。因此,即使以后使用setrunner定义另一个runner,为了能够在没有指定runner的情况下创建options对象,directrunner也需要在类路径中。

    要使其正常工作,只需添加依赖项,使DirectRunner位于类路径中。

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