繁体   English   中英

数据流作业失败,java.lang.UnsupportedOperationException: BundleFinalizer 不受非便携式数据流支持

[英]Dataflow Job Fails stating, java.lang.UnsupportedOperationException: BundleFinalizer unsupported by non-portable Dataflow

我们正在运行一个简单的数据流作业,它从 Spanner 数据库中读取数据并仅显示已更改记录的 Mod 类型。 当我们在 Dataflow 中部署作业时,它总是失败,以下错误,

Error message from worker: java.lang.UnsupportedOperationException: BundleFinalizer unsupported by non-portable Dataflow.\n org.apache.beam.runners.dataflow.worker.SplittableProcessFnFactory$SplittableDoFnRunnerFactory.lambda$createRunner$2(SplittableProcessFnFactory.java:172)\n org.apache.beam.runners.dataflow.worker.repackaged.org.apache.beam.runners.core.OutputAndTimeBoundedSplittableProcessElementInvoker$1.bundleFinalizer(OutputAndTimeBoundedSplittableProcessElementInvoker.java:206)\n org.apache.beam.sdk.io.gcp.spanner .changestreams.dofn.ReadChangeStreamPartitionDoFn$DoFnInvoker.invokeProcessElement(未知来源)\n org.apache.beam.runners.dataflow.worker.repackaged.org.ZB6EFD606D118D0F62066E3 1419FF04CCZ.beam.runners.core.OutputAndTimeBoundedSplittableProcessElementInvoker.invokeProcessElement(OutputAndTimeBoundedSplittableProcessElementInvoker.java:125)\n org.apache.beam.runners.dataflow.worker.repackaged.org.apache.beam.runners.core.SplittableParDoViaKeyedWorkItems$ProcessFn.processElement( SplittableParDoViaKeyedWorkItems.java:567)

下面是源代码,

    public static void main(String[] args) {
        PipelineOptions pipelineOptions = PipelineOptionsFactory.fromArgs(args).withValidation().create();
        Pipeline pipeline = Pipeline.create(pipelineOptions);
        SpannerConfig spannerConfig = SpannerConfig.create().withProjectId("prj-test-1234")
                .withInstanceId("dbinstance1").withDatabaseId("dbtestnew");

        PCollection<String> changeRecord = pipeline
                .apply(SpannerIO.readChangeStream().withSpannerConfig(spannerConfig)
                        .withChangeStreamName("dbteststream").withMetadataDatabase("testmetadata"))
                .apply(ParDo.of(new DoFn<DataChangeRecord, String>() {
                    @ProcessElement
                    public void process(ProcessContext context) {
                        System.out.println("context " + context.element().getModType());
                       context.output(context.element().getModType().name());
                    }

                }));

        pipeline.run();
    }

您正在尝试使用SpannerIO.readChangeStream()转换,该转换使用仅受 Dataflow Runner v2 支持的功能(捆绑完成)。 请添加以下管道选项以使您的管道使用 Dataflow Runner v2 运行。

--experiments=use_runner_v2

请参阅此处了解更多详情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM