数据流失败并出现java.lang.NoSuchMethodError:io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;) [英] Dataflow fails with java.lang.NoSuchMethodError: io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)

查看:492
本文介绍了数据流失败并出现java.lang.NoSuchMethodError:io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试获取一个数据流作业以在Google Cloud上运行.它总是失败并显示:

I'm trying to get a Dataflow job to run on Google Cloud. It always fails with:

java.lang.NoSuchMethodError:io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)Lio/grpc/MethodDescriptor $ Marshaller

java.lang.NoSuchMethodError: io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)Lio/grpc/MethodDescriptor$Marshaller

这是一个maven项目,这是我的依赖项:

It's a maven project, here are my dependencies:

<dependencies>
  <dependency>
    <groupId>com.google.cloud.dataflow</groupId>
    <artifactId>google-cloud-dataflow-java-sdk-all</artifactId>
    <version>1.8.0</version>
  </dependency>   
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-pubsub</artifactId>
    <version>0.4.0</version>
  </dependency>    
  <dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.0.0</version>
  </dependency>       
</dependencies>

我尝试了很多不同的依赖版本.我想念什么?

I've tried a bunch of different dependency versions. What am I missing?

无论是通过exec:java还是通过阴影罐运行,其结果都相同.

It has the same result whether I run via exec:java or via a shade jar.

完整堆栈跟踪:

(e8dbd0c1b8b8a22):java.lang.NoSuchMethodError: io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)Lio/grpc/MethodDescriptor $ Marshaller; 在com.google.iam.v1.IAMPolicyGrpc(IAMPolicyGrpc.java:56)处 com.google.cloud.pubsub.spi.v1.PublisherSettings $ Builder.(PublisherSettings.java:487) 在 com.google.cloud.pubsub.spi.v1.PublisherSettings $ Builder.createDefault(PublisherSettings.java:508) 在 com.google.cloud.pubsub.spi.v1.PublisherSettings $ Builder.access $ 000(PublisherSettings.java:402) 在 com.google.cloud.pubsub.spi.v1.PublisherSettings.defaultBuilder(PublisherSettings.java:224) 在 com.google.cloud.pubsub.spi.DefaultPubSubRpc.(DefaultPubSubRpc.java:138) 在 com.google.cloud.pubsub.PubSubOptions $ DefaultPubSubRpcFactory.create(PubSubOptions.java:60) 在 com.google.cloud.pubsub.PubSubOptions $ DefaultPubSubRpcFactory.create(PubSubOptions.java:54) 在com.google.cloud.ServiceOptions.rpc(ServiceOptions.java:399)处 com.google.cloud.pubsub.PubSubImpl.(PubSubImpl.java:115)位于 com.google.cloud.pubsub.PubSubOptions $ DefaultPubSubFactory.create(PubSubOptions.java:43) 在 com.google.cloud.pubsub.PubSubOptions $ DefaultPubSubFactory.create(PubSubOptions.java:38) 在com.google.cloud.ServiceOptions.service(ServiceOptions.java:391)处 com.google.lindsaysmith.titan.DataflowBulkLoadNodes $ SendPubSub.sendPubsubMessage(DataflowBulkLoadNodes.java:41) 在 com.google.lindsaysmith.titan.DataflowBulkLoadNodes $ SendPubSub.processElement(DataflowBulkLoadNodes.java:32) 在 com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49) 在 com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:139) 在 com.google.cloud.dataflow.sdk.runners.worker.SimpleParDoFn.processElement(SimpleParDoFn.java:190) 在 com.google.cloud.dataflow.sdk.runners.worker.ForwardingParDoFn.processElement(ForwardingParDoFn.java:42) 在 com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerLoggingParDoFn.processElement(DataflowWorkerLoggingParDoFn.java:47) 在 com.google.cloud.dataflow.sdk.util.common.worker.ParDoOperation.process(ParDoOperation.java:55) 在

(e8dbd0c1b8b8a22): java.lang.NoSuchMethodError: io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)Lio/grpc/MethodDescriptor$Marshaller; at com.google.iam.v1.IAMPolicyGrpc.(IAMPolicyGrpc.java:56) at com.google.cloud.pubsub.spi.v1.PublisherSettings$Builder.(PublisherSettings.java:487) at com.google.cloud.pubsub.spi.v1.PublisherSettings$Builder.createDefault(PublisherSettings.java:508) at com.google.cloud.pubsub.spi.v1.PublisherSettings$Builder.access$000(PublisherSettings.java:402) at com.google.cloud.pubsub.spi.v1.PublisherSettings.defaultBuilder(PublisherSettings.java:224) at com.google.cloud.pubsub.spi.DefaultPubSubRpc.(DefaultPubSubRpc.java:138) at com.google.cloud.pubsub.PubSubOptions$DefaultPubSubRpcFactory.create(PubSubOptions.java:60) at com.google.cloud.pubsub.PubSubOptions$DefaultPubSubRpcFactory.create(PubSubOptions.java:54) at com.google.cloud.ServiceOptions.rpc(ServiceOptions.java:399) at com.google.cloud.pubsub.PubSubImpl.(PubSubImpl.java:115) at com.google.cloud.pubsub.PubSubOptions$DefaultPubSubFactory.create(PubSubOptions.java:43) at com.google.cloud.pubsub.PubSubOptions$DefaultPubSubFactory.create(PubSubOptions.java:38) at com.google.cloud.ServiceOptions.service(ServiceOptions.java:391) at com.google.lindsaysmith.titan.DataflowBulkLoadNodes$SendPubSub.sendPubsubMessage(DataflowBulkLoadNodes.java:41) at com.google.lindsaysmith.titan.DataflowBulkLoadNodes$SendPubSub.processElement(DataflowBulkLoadNodes.java:32) at com.google.cloud.dataflow.sdk.util.SimpleDoFnRunner.invokeProcessElement(SimpleDoFnRunner.java:49) at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase.processElement(DoFnRunnerBase.java:139) at com.google.cloud.dataflow.sdk.runners.worker.SimpleParDoFn.processElement(SimpleParDoFn.java:190) at com.google.cloud.dataflow.sdk.runners.worker.ForwardingParDoFn.processElement(ForwardingParDoFn.java:42) at com.google.cloud.dataflow.sdk.runners.worker.DataflowWorkerLoggingParDoFn.processElement(DataflowWorkerLoggingParDoFn.java:47) at com.google.cloud.dataflow.sdk.util.common.worker.ParDoOperation.process(ParDoOperation.java:55) at

推荐答案

在这种情况下,通常的答案是,您确实必须完全使用Dataflow SDK依赖项中声明的gRPC版本和协议缓冲区.这包括所有传递依赖关系,因此您可能必须禁止其他库的gRPC或protobuf依赖关系,以使它们不会相互干扰.

The usual answer in this situation is that you really must use exactly the version of gRPC and Protocol Buffers declared in the dependencies of the Dataflow SDK. This includes all transitive dependencies, so you may have to suppress gRPC or protobuf dependencies of other libraries so they do not intefere.

您可以在此处(gRPC)中查看版本并此处(protobuf).我没有让他们回答这个问题,所以它不会过时.

You can see the versions here (gRPC) and here (protobuf). I'm leaving them out of this answer so it does not get out of date.

这篇关于数据流失败并出现java.lang.NoSuchMethodError:io.grpc.protobuf.ProtoUtils.marshaller(Lcom/google/protobuf/Message;)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆