【发布时间】:2018-03-22 21:12:50
【问题描述】:
这个问题是this one 的后续问题。 我正在尝试使用 apache 梁从谷歌扳手表中读取数据(然后进行一些数据处理)。我使用 java SDK 编写了以下最小示例:
package com.google.cloud.dataflow.examples;
import java.io.IOException;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.PipelineResult;
import org.apache.beam.sdk.io.gcp.spanner.SpannerIO;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.values.PCollection;
import com.google.cloud.spanner.Struct;
public class backup {
public static void main(String[] args) throws IOException {
PipelineOptions options = PipelineOptionsFactory.create();
Pipeline p = Pipeline.create(options);
PCollection<Struct> rows = p.apply(
SpannerIO.read()
.withInstanceId("my_instance")
.withDatabaseId("my_db")
.withQuery("SELECT t.table_name FROM information_schema.tables AS t")
);
PipelineResult result = p.run();
try {
result.waitUntilFinish();
} catch (Exception exc) {
result.cancel();
}
}
}
当我尝试使用 DirectRunner 执行代码时,我得到 以下错误信息:
org.apache.beam.runners.direct.repackaged.com.google.common.util.concurrent.UncheckedExecutionException:
org.apache.beam.sdk.util.UserCodeException: java.lang.NoClassDefFoundError:无法初始化类 com.google.cloud.spanner.spi.v1.SpannerErrorInterceptor
[...] 原因: org.apache.beam.sdk.util.UserCodeException: java.lang.NoClassDefFoundError:无法初始化类 com.google.cloud.spanner.spi.v1.SpannerErrorInterceptor
[...] 原因: java.lang.NoClassDefFoundError:无法初始化类 com.google.cloud.spanner.spi.v1.SpannerErrorInterceptor
或者,使用 DataflowRunner:
org.apache.beam.runners.direct.repackaged.com.google.common.util.concurrent.UncheckedExecutionException: org.apache.beam.sdk.util.UserCodeException: java.lang.NoSuchFieldError: internal_static_google_rpc_LocalizedMessage_fieldAccessorTable
[...] 引起:org.apache.beam.sdk.util.UserCodeException: java.lang.NoSuchFieldError: internal_static_google_rpc_LocalizedMessage_fieldAccessorTable
[...] 引起:java.lang.NoSuchFieldError: internal_static_google_rpc_LocalizedMessage_fieldAccessorTable
在这两种情况下,错误消息都相当神秘,我无法从谷歌搜索中找到任何关于导致错误的明确想法。我也找不到任何使用 SpannerIO 模块的示例脚本。
这个错误是由于我的代码中有明显错误,还是由于谷歌云工具安装错误?
【问题讨论】:
-
啊,你可能遇到了依赖冲突issues.apache.org/jira/browse/BEAM-2837。它已修复,但我们需要等待新版本的光束。您可以自己从源代码构建梁二进制文件,也可以在 pom.xml gist.github.com/mairbek/0c770ff7b591e3db58936b0b9294215a 中使用此技巧
-
哦。谢谢 !我想我会尝试修复。
标签: java google-cloud-dataflow apache-beam google-cloud-spanner