2015-11-07 2 views
1

Я не могу вызывать какие-либо операции с Google Cloud Bigtable с Java.Получение ошибки при использовании hbase-клиента с Google Cloud Bigtable

Я получаю эту ошибку:

[2015-11-07T01:16:06,214] 21900 ERROR [http-bio-8080-exec-1] com.google.cloud.bigtable.hbase.BigtableTable - Encountered ServiceException when executing put. 
com.google.bigtable.repackaged.com.google.common.util.concurrent.UncheckedExecutionException: io.grpc.StatusRuntimeException: UNKNOWN 
     at io.grpc.stub.Calls.getUnchecked(Calls.java:117) ~[bigtable-hbase-1.0-0.2.1.jar:?] 
     at io.grpc.stub.Calls.blockingUnaryCall(Calls.java:129) ~[bigtable-hbase-1.0-0.2.1.jar:?] 
     at com.google.cloud.bigtable.grpc.BigtableDataGrpcClient.mutateRow(BigtableDataGrpcClient.java:250) ~[bigtable-hbase-1.0-0.2.1.jar:?] 
     at com.google.cloud.bigtable.hbase.BigtableTable.put(BigtableTable.java:333) ~[bigtable-hbase-1.0-0.2.1.jar:?] 
     at com.tango.bigtable.rest.v1.BigTableRestController.insert(BigTableRestController.java:39) ~[BigTableRestController.class:?] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_66] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_66] 
     at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_66] 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175) ~[spring-web-4.0.5.RELEASE.jar:4.0.5.RELEASE] 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE] 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE] 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE] 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE] 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE] 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE] 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) ~[servlet-api.jar:?] 
     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) ~[spring-webmvc-4.0.5.RELEASE.jar:4.0.5.RELEASE] 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) ~[servlet-api.jar:?] 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) ~[catalina.jar:7.0.55] 
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat7-websocket.jar:7.0.55] 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) ~[catalina.jar:7.0.55] 
     at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:67) ~[log4j-web-2.0.2.jar:2.0.2] 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) ~[catalina.jar:7.0.55] 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) ~[catalina.jar:7.0.55] 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) ~[tomcat-coyote.jar:7.0.55] 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) ~[tomcat-coyote.jar:7.0.55] 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) ~[tomcat-coyote.jar:7.0.55] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_66] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_66] 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-coyote.jar:7.0.55] 
     at java.lang.Thread.run(Unknown Source) [?:1.8.0_66] 
Caused by: io.grpc.StatusRuntimeException: UNKNOWN 
     at io.grpc.Status.asRuntimeException(Status.java:428) ~[bigtable-hbase-1.0-0.2.1.jar:?] 
     at io.grpc.stub.Calls$UnaryStreamToFuture.onClose(Calls.java:324) ~[bigtable-hbase-1.0-0.2.1.jar:?] 
     at io.grpc.ChannelImpl$CallImpl$ClientStreamListenerImpl$3.run(ChannelImpl.java:402) ~[bigtable-hbase-1.0-0.2.1.jar:?] 
     at io.grpc.SerializingExecutor$TaskRunner.run(SerializingExecutor.java:154) ~[bigtable-hbase-1.0-0.2.1.jar:?] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:1.8.0_66] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:1.8.0_66] 
     ... 1 more 
Caused by: java.nio.channels.ClosedChannelException 

Вот тестовый код, который генерирует эту ошибку:

try { 
     Connection connection = BigTableHelper.getConnection(); 
     Table table = connection.getTable(TableName.valueOf("Tango")); 

     byte[] rowKey = Bytes.toBytes("username"); 
     Put p = new Put(rowKey); 
     p.addColumn(Bytes.toBytes("O"), Bytes.toBytes("acme"), Bytes.toBytes("sync")); 
     LOGGER.trace("Putting to row {}", Bytes.toStringBinary(rowKey)); 
     table.put(p); 
    } catch (IOException e) { 
    } 

Кто-нибудь знает, что может закрывать соединение? Я явно не закрываю соединение, и я даже попытался поместить операцию put в ThreadPoolExecutor, чтобы изолировать его от основного потока контроллера, но безрезультатно.

+0

1-й пользователь Tomcat. Чтобы запустить Jetty, мне пришлось добавить alpn-boot в строку выполнения JAVA, а затем добавить alpn-boot в список системных классов для загрузчика класса сервлета. Ничто в вашей трассе стека не говорит о том, что это проблема, и я буду сначала смотреть. Alpn требуется для http/2, который использует gRPC. Несмотря на то, что это часть проекта Jetty, вам понадобится его для Tomcat. Версия alpn-boot изменяется на основе младшей версии java, которую вы используете. (т. е. для Java7 около 4 банок и столько же для Java8). http://www.eclipse.org/jetty/documentation/current/alpn-chapter.html –

+0

Ах спасибо. Я буду использовать Jetty, Tomcat не поддерживает HTTP/2 до Tomcat 9. Это все объясняет! –

ответ

1

Мы еще не тестировали с Tomcat.

Чтобы запустить Jetty, мне пришлось добавить alpn-boot в строку выполнения JAVA, затем добавить alpn-boot в список системных классов для загрузчика класса сервлета.

Ничто в вашей трассе стека не говорит о том, что это проблема, однако это будет то место, где я впервые посмотрю.

Alpn требуется для http/2, который использует gRPC. Несмотря на то, что это часть проекта Jetty, вам понадобится его для Tomcat.

Версия alpn-boot изменяется на основе младшей версии java, которую вы используете. (т. е. для Java7 около 4 банок и столько же для Java8).

Смежные вопросы