数据流中的错误:io.grpc.StatusRuntimeException:不可用

Posted

技术标签:

【中文标题】数据流中的错误:io.grpc.StatusRuntimeException:不可用【英文标题】:Error in Dataflow: io.grpc.StatusRuntimeException: UNAVAILABLE 【发布时间】:2017-04-19 00:48:22 【问题描述】:

我正在尝试构建一个从 BigQuery 读取并向 Pubsub 主题发送消息的 Dataflow 作业。我一直在与相互依赖作斗争,这是最新一期。

Dataflow 作业开始正常,但失败并出现以下异常:

com.google.cloud.pubsub.PubSubException: io.grpc.StatusRuntimeException: 在 com.google.cloud.pubsub.spi.DefaultPubSubRpc$1.apply(DefaultPubSubRpc.java:174) 在 com.google.cloud.pubsub 不可用.spi.DefaultPubSubRpc$1.apply(DefaultPubSubRpc.java:168) 在 com.google.common.util.concurrent.Futures$CatchingFuture.doFallback(Futures.java:842) 在 com.google.common.util.concurrent.Futures$ CatchingFuture.doFallback(Futures.java:834) at com.google.common.util.concurrent.Futures$AbstractCatchingFuture.run(Futures.java:789) at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute( MoreExecutors.java:456) 在 com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:817) 在 com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java:753) 在 com .google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:634) 在 com.google.common.util.concurrent.SettableFuture.setException(SettableFuture.java:53) 在 com.google.api.gax。 grpc.RetryingCallable$Retryer$1.onFailure(RetryingCallable.java:139) at com.google.common.util.concurrent.Futures$6.run(Futures.java:1764) at com.google.common.util.concurrent.MoreExecutors$ DirectExecutor.execute(MoreExecutors.java:456) 在 com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:817) 在 com.google.common.util.concurrent.AbstractFuture.complete(AbstractFuture.java: 753) 在 com.google.common.util.concurrent.SettableFuture.setException(SettableFuture.java:53) 在 com.google.api .gax.grpc.ExceptionTransformingCallable$1.onFailure(ExceptionTransformingCallable.java:91) 在 com.google.common.util.concurrent.Futures$6.run(Futures.java:1764) 在 com.google.common.util.concurrent.MoreExecutors $DirectExecutor.execute(MoreExecutors.java:456) 在 com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:817) 在 com.google.common.util.concurrent .AbstractFuture.complete(AbstractFuture.java:753) 在 com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:634) 在 io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:382 ) 在 io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$3.runInContext(ClientCallImpl.java:462) 在 io.grpc.internal.ContextRunnable.run 的 io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:358) (ContextRunnable.java:54) 在 io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util。 concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ) 引起:com.google.api.gax.grpc.ApiException: io.grpc.StatusRuntimeException: UNAVAIL ABLE 在 com.google.api.gax.grpc.ExceptionTransformingCallable$1.onFailure(ExceptionTransformingCallable.java:91) 在 com.google.common.util.concurrent.Futures$6.run(Futures.java:1764) 在 com.google。 common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:456) 在 com.google.common.util.concurrent.AbstractFuture.executeListener(AbstractFuture.java:817) 在 com.google.common.util.concurrent。 AbstractFuture.complete(AbstractFuture.java:753) at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:634) at io.grpc.stub.ClientCalls$GrpcFuture.setException(ClientCalls.java:382)在 io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:358) 在 io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$3.runInContext(ClientCallImpl.java:462) 在 io.grpc.internal.ContextRunnable.run( ContextRunnable.java:54) 在 io.grpc.internal.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154) 在 java.util.concurrent.Executors$RunnableAdapte r.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java。 util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 617) at java.lang.Thread.run(Thread.java:745) 原因:io.grpc.StatusRuntimeException: UNAVAILABLE at io.grpc.Status.asRuntimeException(Status.java:431) ... 11 更多原因: javax.net.ssl.SSLHandshakeException:在 sun.security.ssl.SSLEngineImpl.kickstartHandshake(SSLEngineImpl) 的 sun.security.ssl.Handshaker.activate(Handshaker.java:503) 中没有适当的协议(协议被禁用或密码套件不合适) .java:729) 在 sun.security.ssl.SSLEngineImpl.beginHandshake(SSLEngineImpl.java:756) 在 io.net ty.handler.ssl.JdkSslEngine.beginHandshake(JdkSslEngine.java:147) 在 io.netty.handler.ssl.SslHandler.handshake(SslHandler.java:1363) 在 io.netty.handler.ssl.SslHandler.channelActive(SslHandler. java:1405) 在 io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelActiveNow(ChannelHandlerInvokerUtil.java:48) 在 io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelActive(DefaultChannelHandlerInvoker.java:79) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelActive(AbstractChannelHandlerContext .java:126) 位于 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:260) 的 io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:884) 处。 nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:290) 在 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:527) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java: 467)在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:381) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) 在 io.netty.util.concurrent.SingleThreadEventExecutor $5。运行(SingleThreadEventExecutor.java:742) ... 3 更多

我怀疑它与正在使用的 netty/ssl 库有关,但我不知道正确的做法是什么。我花了很多时间试图从生成的阴影 jar 中排除某些版本的某些库,其中类重叠,但最终导致类未找到异常。

这些是我的依赖项:

<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.3.0</version>
  </dependency>
  <dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.0.0-beta-1</version>
  </dependency>
</dependencies>

这是依赖树:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ dataflow-bulk-load ---
[INFO] com.google.lindsaysmith.titan:dataflow-bulk-load:jar:0.0.1-SNAPSHOT
[INFO] +- com.google.cloud.dataflow:google-cloud-dataflow-java-sdk-all:jar:1.8.0:compile
[INFO] |  +- com.google.apis:google-api-services-dataflow:jar:v1b3-rev36-1.22.0:compile
[INFO] |  +- io.grpc:grpc-all:jar:0.13.1:compile
[INFO] |  |  +- io.grpc:grpc-auth:jar:0.13.1:compile
[INFO] |  |  +- io.grpc:grpc-netty:jar:0.13.1:compile
[INFO] |  |  |  \- io.netty:netty-codec-http2:jar:4.1.0.CR1:compile
[INFO] |  |  |     \- io.netty:netty-codec-http:jar:4.1.0.CR1:compile
[INFO] |  |  +- io.grpc:grpc-protobuf:jar:0.13.1:compile
[INFO] |  |  +- io.grpc:grpc-core:jar:0.13.1:compile
[INFO] |  |  +- io.grpc:grpc-okhttp:jar:0.13.1:compile
[INFO] |  |  |  +- com.squareup.okio:okio:jar:1.6.0:compile
[INFO] |  |  |  \- com.squareup.okhttp:okhttp:jar:2.5.0:compile
[INFO] |  |  +- io.grpc:grpc-protobuf-nano:jar:0.13.1:compile
[INFO] |  |  |  \- com.google.protobuf.nano:protobuf-javanano:jar:3.0.0-alpha-5:compile
[INFO] |  |  \- io.grpc:grpc-stub:jar:0.13.1:compile
[INFO] |  +- io.netty:netty-handler:jar:4.1.0.CR1:compile
[INFO] |  |  +- io.netty:netty-buffer:jar:4.1.0.CR1:compile
[INFO] |  |  |  \- io.netty:netty-common:jar:4.1.0.CR1:compile
[INFO] |  |  +- io.netty:netty-transport:jar:4.1.0.CR1:compile
[INFO] |  |  |  \- io.netty:netty-resolver:jar:4.1.0.CR1:compile
[INFO] |  |  \- io.netty:netty-codec:jar:4.1.0.CR1:compile
[INFO] |  +- com.google.api.grpc:grpc-pubsub-v1:jar:0.0.2:compile
[INFO] |  |  \- com.google.api.grpc:grpc-core-proto:jar:0.0.3:compile
[INFO] |  +- com.google.auth:google-auth-library-oauth2-http:jar:0.4.0:compile
[INFO] |  |  \- com.google.auth:google-auth-library-credentials:jar:0.4.0:compile
[INFO] |  +- com.google.cloud.bigtable:bigtable-protos:jar:0.3.0:compile
[INFO] |  |  \- com.google.guava:guava:jar:19.0:compile
[INFO] |  +- com.google.api-client:google-api-client:jar:1.22.0:compile
[INFO] |  +- com.google.apis:google-api-services-bigquery:jar:v2-rev295-1.22.0:compile
[INFO] |  +- com.google.apis:google-api-services-clouddebugger:jar:v2-rev8-1.22.0:compile
[INFO] |  +- com.google.apis:google-api-services-pubsub:jar:v1-rev10-1.22.0:compile
[INFO] |  +- com.google.apis:google-api-services-storage:jar:v1-rev71-1.22.0:compile
[INFO] |  +- com.google.http-client:google-http-client:jar:1.22.0:compile
[INFO] |  |  \- org.apache.httpcomponents:httpclient:jar:4.0.1:compile
[INFO] |  |     +- org.apache.httpcomponents:httpcore:jar:4.0.1:compile
[INFO] |  |     +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |  |     \- commons-codec:commons-codec:jar:1.3:compile
[INFO] |  +- com.google.http-client:google-http-client-jackson2:jar:1.22.0:compile
[INFO] |  +- com.google.oauth-client:google-oauth-client-java6:jar:1.22.0:compile
[INFO] |  +- com.google.oauth-client:google-oauth-client:jar:1.22.0:compile
[INFO] |  +- com.google.apis:google-api-services-datastore-protobuf:jar:v1beta2-rev1-4.0.0:compile
[INFO] |  +- com.google.cloud.bigdataoss:gcsio:jar:1.4.5:compile
[INFO] |  |  +- com.google.api-client:google-api-client-java6:jar:1.22.0:compile
[INFO] |  |  \- com.google.api-client:google-api-client-jackson2:jar:1.22.0:compile
[INFO] |  +- com.google.cloud.datastore:datastore-v1-proto-client:jar:1.1.0:compile
[INFO] |  |  +- com.google.http-client:google-http-client-protobuf:jar:1.22.0:compile
[INFO] |  |  \- com.google.http-client:google-http-client-jackson:jar:1.22.0:compile
[INFO] |  +- com.google.cloud.datastore:datastore-v1-protos:jar:1.0.1:compile
[INFO] |  +- com.google.cloud.bigdataoss:util:jar:1.4.5:compile
[INFO] |  +- com.google.code.findbugs:jsr305:jar:3.0.1:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-core:jar:2.7.0:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.7.0:compile
[INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.7.0:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.7.14:compile
[INFO] |  +- org.apache.avro:avro:jar:1.7.7:compile
[INFO] |  |  +- org.codehaus.jackson:jackson-core-asl:jar:1.9.13:compile
[INFO] |  |  +- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.13:compile
[INFO] |  |  \- com.thoughtworks.paranamer:paranamer:jar:2.3:compile
[INFO] |  +- org.xerial.snappy:snappy-java:jar:1.1.2.1:compile
[INFO] |  +- org.apache.commons:commons-compress:jar:1.9:compile
[INFO] |  \- joda-time:joda-time:jar:2.4:compile
[INFO] +- com.google.cloud:google-cloud-pubsub:jar:0.3.0:compile
[INFO] |  +- io.netty:netty-tcnative-boringssl-static:jar:1.1.33.Fork17:compile
[INFO] |  +- com.google.cloud:google-cloud-core:jar:0.3.0:compile
[INFO] |  |  +- com.google.api-client:google-api-client-appengine:jar:1.21.0:compile
[INFO] |  |  |  +- com.google.oauth-client:google-oauth-client-appengine:jar:1.21.0:compile
[INFO] |  |  |  |  +- com.google.oauth-client:google-oauth-client-servlet:jar:1.21.0:compile
[INFO] |  |  |  |  |  \- com.google.http-client:google-http-client-jdo:jar:1.21.0:compile
[INFO] |  |  |  |  \- javax.servlet:servlet-api:jar:2.5:compile
[INFO] |  |  |  +- com.google.api-client:google-api-client-servlet:jar:1.21.0:compile
[INFO] |  |  |  |  \- javax.jdo:jdo2-api:jar:2.3-eb:compile
[INFO] |  |  |  |     \- javax.transaction:transaction-api:jar:1.1:compile
[INFO] |  |  |  \- com.google.http-client:google-http-client-appengine:jar:1.21.0:compile
[INFO] |  |  +- org.json:json:jar:20151123:compile
[INFO] |  |  +- com.google.api:gax:jar:0.0.16:compile
[INFO] |  |  |  \- com.google.inject:guice:jar:4.0:compile
[INFO] |  |  |     +- javax.inject:javax.inject:jar:1:compile
[INFO] |  |  |     \- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  |  \- com.google.api.grpc:grpc-google-common-protos:jar:0.0.7:compile
[INFO] |  +- com.google.api.grpc:grpc-google-pubsub-v1:jar:0.0.7:compile
[INFO] |  \- com.google.auto.value:auto-value:jar:1.1:compile
[INFO] \- com.google.protobuf:protobuf-java:jar:3.0.0-beta-1:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.749s
[INFO] Finished at: Sun Dec 04 16:50:41 CET 2016
[INFO] Final Memory: 16M/972M
[INFO] ------------------------------------------------------------------------

【问题讨论】:

如果这可以可靠地复制,您可能会考虑将应用程序代码的副本(在仍然复制的同时尽可能精简到最低级别,确保清除任何专有或敏感内容)到数据流githubIssues Page,所以谷歌可以看看原因。 我重新创建了一个全新的项目,这个问题再也没有发生过。我认为这与应用于我的项目的一些自动防火墙设置有关,可能会破坏或中断 dns 请求。 好吧,这至少很高兴。但在那种情况下,我不太确定这是否符合自我回答的条件......我想鉴于它不太可能再次发生,但对其他人来说仍然有用,所以不管它不带回答或发布自我回答,无论哪种方式。 实际上我刚刚意识到这是一个不同的问题:/。但我确实解决了这个问题,我会发布自己的答案。 【参考方案1】:

当我尝试使用 PubSub 库为 DataFlow 中的每个已处理项目手动发送消息时,就会出现此问题。

我没有这样做,而是改用 DataFlow 的 PubSub IO Sink 类来发送消息,这完美无缺。

文档:

https://cloud.google.com/dataflow/model/pubsub-io#writing-with-pubsubio

【讨论】:

啊,现在记录下来真是太好了。你可能不会是最后一个尝试这个的人。干杯!

以上是关于数据流中的错误:io.grpc.StatusRuntimeException:不可用的主要内容,如果未能解决你的问题,请参考以下文章

从数据表错误中的按钮获取数据

VBA 中的数据转换类型错误

使用来自 arduino 串行打印的数据更新 matlab 中的线图,为啥会出现“数组形状错误”错误?

Create ML 中的“指定数据源中的空表”错误

将数据插入数据库时​​实体框架中的验证错误

useEffect 数据 React 中的逗号预期错误