java – 在apache beam中使用SpannerIO时出错
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在apache beam中使用SpannerIO时出错,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2960字,纯文字阅读大概需要5分钟。
内容图文
这个问题是this one的后续问题.
我正在尝试使用apache beam从google spanner表中读取数据(然后进行一些数据处理).我使用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: Could not initialize class
com.google.cloud.spanner.spi.v1.SpannerErrorInterceptor[…] Caused by:
org.apache.beam.sdk.util.UserCodeException:
java.lang.NoClassDefFoundError: Could not initialize class
com.google.cloud.spanner.spi.v1.SpannerErrorInterceptor[…] Caused by:
java.lang.NoClassDefFoundError: Could not initialize class
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[…] Caused by: org.apache.beam.sdk.util.UserCodeException:
java.lang.NoSuchFieldError:
internal_static_google_rpc_LocalizedMessage_fieldAccessorTable[…] Caused by: java.lang.NoSuchFieldError:
internal_static_google_rpc_LocalizedMessage_fieldAccessorTable
在这两种情况下,错误信息都相当神秘,我找不到任何明确的想法,因为谷歌搜索的错误是什么原因.我也找不到使用SpannerIO模块的任何示例脚本.
这个错误是由于我的代码中的明显错误,还是由于Google云工具安装不当造成的?
解决方法:
此问题很可能是由此处描述的依赖性兼容性问题引起的:BEAM-2837.以下是JIRA问题中的一条评论中描述的快速解决方法:
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>grpc-google-common-protos</artifactId>
<version>0.1.9</version>
</dependency>
<dependency>
<groupId>org.apache.beam</groupId>
<artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
<version>${beam.version}</version>
<exclusions>
<exclusion>
<groupId>com.google.api.grpc</groupId>
<artifactId>grpc-google-common-protos</artifactId>
</exclusion>
</exclusions>
</dependency>
明确定义所需的com.google.api.grpc依赖关系并从org.apache.beam中排除该版本.
内容总结
以上是互联网集市为您收集整理的java – 在apache beam中使用SpannerIO时出错全部内容,希望文章能够帮你解决java – 在apache beam中使用SpannerIO时出错所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。