【发布时间】:2017-07-03 00:56:05
【问题描述】:
我正在 Scala 中做一个 Bigtable + Dataflow 项目。使用 sbt 程序集构建一个 fat jar。它组装得很好,但我一运行就收到以下运行时错误:
Exception in thread "main" java.lang.IllegalStateException: Could not find an appropriate constructor for com.google.cloud.bigtable.hbase1_2.BigtableConnection
at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:65)
at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:55)
at com.snowplowanalytics.dataflow.streaming.storage.BigtableUtils$.setupBigtable(BigtableUtils.scala:60)
at com.snowplowanalytics.dataflow.streaming.StreamingCounts$.setupDataflow(StreamingCounts.scala:71)
at com.snowplowanalytics.dataflow.streaming.StreamingCounts$.execute(StreamingCounts.scala:139)
at com.snowplowanalytics.dataflow.streaming.StreamingCountsApp$.main(StreamingCountsApp.scala:75)
at com.snowplowanalytics.dataflow.streaming.StreamingCountsApp.main(StreamingCountsApp.scala)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:62)
... 6 more
Caused by: java.lang.IllegalStateException: Neither Jetty ALPN nor OpenSSL via netty-tcnative were properly configured.
at com.google.cloud.bigtable.grpc.BigtableSession.<init>(BigtableSession.java:238)
at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:124)
at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:92)
at com.google.cloud.bigtable.hbase1_2.BigtableConnection.<init>(BigtableConnection.java:41)
... 11 more
我已经阅读了这些问题并尝试了他们的建议,但没有成功。
How to solve "Neither Jetty ALPN nor OpenSSL via netty-tcnative were properly configured"?
Bigtable error with sbt assembly fat JAR (Neither Jetty ALPN nor OpenSSL are available)
我正在使用以下工件和版本(用于谷歌云相关库):
"com.google.cloud.dataflow" % "google-cloud-dataflow-java-sdk-all" % "1.9.0"
"com.google.cloud.bigtable" % "bigtable-hbase-1.2" % "0.9.1"
我正在导入的其他一些库依赖于 google 的协议缓冲区库,这引发了冲突,我使用的合并策略是丢弃 bigtable-protos-0.3.0.jar(有利于 grpc-core -proto-0.0.3.jar)
【问题讨论】:
-
你看过在 sbt 中使用阴影吗? github.com/sbt/sbt-assembly#shading 我遇到过类似的 protobuf 冲突问题,我用这种方式解决了我的 fat jar
-
您是否将 netty-tcnative-boringssl-static 添加到您的构建中?这是 maven 的配置 https://cloud.google.com/bigtable/docs/using-maven
-
另外,删除 bigtable-protos-0.3.0.jar 应该会导致一些其他问题。您需要 bigtable protobuf 对象才能执行 bigtable 请求。这是另一种 Dataflow 方法,其中包括将消除冲突的 protobuf 对象的阴影版本:cloud.google.com/bigtable/docs/dataflow-hbase。
标签: scala sbt google-cloud-dataflow bigtable google-cloud-bigtable