java - Apache 光束 : Cannot find DataflowRunner

标签 java google-cloud-dataflow apache-beam

我正在尝试运行一个管道,我能够使用 DirectRunner 成功运行它, 在谷歌云数据流上。当我执行这个 Maven 命令时:

mvn compile exec:java \
    -Dexec.mainClass=com.example.Pipeline \
    -Dexec.args="--project=project-name \
    --stagingLocation=gs://bucket-name/staging/ \
    ... custom arguments ...
    --runner=DataflowRunner"

我收到以下错误:

No Runner was specified and the DirectRunner was not found on the classpath.
[ERROR] Specify a runner by either:
[ERROR]     Explicitly specifying a runner by providing the 'runner' property
[ERROR]     Adding the DirectRunner to the classpath
[ERROR]     Calling 'PipelineOptions.setRunner(PipelineRunner)' directly

我故意删除了 DirectRunner来 self 的 pom.xml并添加了这个:

<dependency>
    <groupId>org.apache.beam</groupId>
    <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
    <version>2.0.0</version>
    <scope>runtime</scope>
</dependency>

我继续删除了 <scope>标记,然后称为 options.setRunner(DataflowRunner.class) ,但这没有帮助。扩展我自己的 PipelineOptions来自 DataflowPipelineOptions 的界面也没有解决问题。

看起来它忽略了 runner我无法调试的选项。

更新:这是完整的 pom.xml ,以防万一:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>dataflow</artifactId>
    <version>0.1</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-sdks-java-core</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
            <version>2.0.0</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-sdks-java-io-jdbc</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.1.4.jre7</version>
        </dependency>
    </dependencies>
</project>

最佳答案

忘记将我的 PipelineOptions 实例作为参数传递给 Pipeline.create()方法是我的问题的原因。

PipelineOptionsFactory.register(MyOptions.class);
MyOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(MyOptions.class);
Pipeline pipeline = Pipeline.create(options); // Don't forget the options argument.
...
pipeline.run();

关于java - Apache 光束 : Cannot find DataflowRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527075/

相关文章:

java - 如何创建阿拉伯语语言的 csv 文件?

java - 我怎样才能使android-studio中的文本具有动画效果?

java - Android OpenGL ES Map Globe 就像 iOS 中的 WhirlyGlobe

java - 在有状态处理中,您应该如何处理由于从未达到缓冲区大小而未处理的数据?

java - 如何从核心项目登录

java - CloudResourceManager$Builder 上的 ClassNotFoundException

python - 谷歌云平台: Pub/Sub to Bigtable

java - 注册编码器不适用于 Dataflow

java - 在 eclipse 中自动化已经构建的 google 数据流管道

python - 在 Dataflow Python flex 模板中包含另一个文件 ImportError