2017-01-10 10 views
3

akka-http로 Bigtable (HBase)에서 데이터를 검색 할 수있는 안정적인 API를 구축하고 싶습니다.sbt 어셈블리에서 Bigtable 오류가 발생했습니다. JAR (부두 ALPN 또는 OpenSSL을 사용할 수 없음)

Bigtable 클라이언트 API에 연결하려면 netty-tcnative-boringssl-static이 필요합니다. 이것은 내 인 IntelliJ IDE 내에서 꽤 잘 작동하지만, 내가 SBT 조립과 지방 JAR을 구축 할 때, 그리고 다음 서버를 실행, 나는 다음과 같은 오류 얻을 :

2017-01-10 12:03:41 ERROR BigtableSession:129 - Neither Jetty ALPN nor OpenSSL are available. OpenSSL unavailability cause: 
java.lang.IllegalArgumentException: Failed to load any of the given libraries: [netty-tcnative-linux-x86_64, netty-tcnative-linux-x86_64-fedora, netty-tcnative] 
Exception in thread "main" java.lang.ExceptionInInitializerError 
     at mycompany.algo.serving.model.algoServingModelLoaderTest$.loadLastModel(algoServingModelLoaderTest.scala:36) 
     at mycompany.algo.serving.algoServingLauncherTest$$anonfun$4.apply(algoServingLauncherTest.scala:38) 
     at mycompany.algo.serving.algoServingLauncherTest$$anonfun$4.apply(algoServingLauncherTest.scala:38) 
     at mycompany.serving.MultiPredictorEbapServing$$anonfun$loadPredictors$1.apply(MultiPredictorEbapServing.scala:25) 
     at mycompany.serving.MultiPredictorEbapServing$$anonfun$loadPredictors$1.apply(MultiPredictorEbapServing.scala:25) 
     at scala.collection.immutable.List.foreach(List.scala:381) 
     at mycompany.serving.MultiPredictorEbapServing.loadPredictors(MultiPredictorEbapServing.scala:25) 
     at mycompany.algo.serving.algoServingLauncherTest$.delayedEndpoint$mycompany$algo$serving$algoServingLauncherTest$1(algoServingLauncherTest.scala:38) 
     at mycompany.algo.serving.algoServingLauncherTest$delayedInit$body.apply(algoServingLauncherTest.scala:11) 
     at scala.Function0$class.apply$mcV$sp(Function0.scala:34) 
     at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 
     at scala.App$$anonfun$main$1.apply(App.scala:76) 
     at scala.App$$anonfun$main$1.apply(App.scala:76) 
     at scala.collection.immutable.List.foreach(List.scala:381) 
     at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35) 
     at scala.App$class.main(App.scala:76) 
     at mycompany.algo.serving.algoServingLauncherTest$.main(algoServingLauncherTest.scala:11) 
     at mycompany.algo.serving.algoServingLauncherTest.main(algoServingLauncherTest.scala) 
Caused by: java.lang.IllegalgotateException: Could not find an appropriate constructor for com.google.cloud.bigtable.hbase1_2.BigtableConnection 
     at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:88) 
     at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:72) 
     at mycompany.algo.serving.model.algoServingModel$.<init>(algoServingModel.scala:25) 
     at mycompany.algo.serving.model.algoServingModel$.<clinit>(algoServingModel.scala) 
     ... 18 more 
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:422) 
     at com.google.cloud.bigtable.hbase.BigtableConfiguration.connect(BigtableConfiguration.java:85) 
     ... 21 more 
Caused by: java.lang.IllegalgotateException: Neither Jetty ALPN nor OpenSSL via netty-tcnative were properly configured. 
     at com.google.cloud.bigtable.grpc.BigtableSession.<init>(BigtableSession.java:279) 
     at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:137) 
     at org.apache.hadoop.hbase.client.AbstractBigtableConnection.<init>(AbstractBigtableConnection.java:104) 
     at com.google.cloud.bigtable.hbase1_2.BigtableConnection.<init>(BigtableConnection.java:50) 
     ... 26 more 

어떻게해야합니까를?

내가 스칼라 2.11.8 사용하고 내 SBT는 다음과 같습니다 도와

dependencies ++= Seq(
    "com.google.cloud" % "google-cloud" % "0.7.0", 
    "com.google.cloud.bigtable" % "bigtable-hbase-1.2" % "0.9.4", 
    "io.netty" % "netty-tcnative-boringssl-static" % "1.1.33.Fork19", 
    "org.apache.hbase" % "hbase-server" % "1.2.1", 
    "org.apache.hbase" % "hbase-client" % "1.2.1", 
    "org.apache.hbase" % "hbase-common" % "1.2.1", 
) 

감사

편집가 편집 이후 그것은 akka에 의해 발생했지만, 그것을 reproduice 수 원래 불구하고 편집

Akka

없이 내 나쁜, 네이티브 라이브러리는 내 SBT 어셈블리 병합 전략 퇴거했다

편집이 메이븐 작동는 문제는 SBT

해결이는 SBT 조립 기본 병합 전략에 의해 발생 된로 보인다. 나는 나는 문제를 해결하기 위해이 전략을 사용, 전략을 병합

val settings = Seq(
    assemblyMergeStrategy in assembly := { 
     case PathList("META-INF", xs @ _*) => 
     xs map {_.toLowerCase} match { 
      case "native" :: xs => 
      MergeStrategy.singleOrError 
      case _ => MergeStrategy.discard 
     } 
     case "reference.conf" => MergeStrategy.concat 
     case x => MergeStrategy.first 
    } 
) 
+0

참고로, "org.apache.hbase"% "hbase-server"% "1.2.1"은 필요하지 않습니다. 또한 왜 "com.google.cloud"% "google-cloud"% "0.7.0"이 필요한지 잘 모르겠습니다. 클라우드 bigtable 요구 사항이 아닙니다. –

+0

@Solomon "com.google.cloud"이 클라우드 저장 공간으로 필요합니다.이 게시물의 목적에 따라 삭제하는 것을 잊었습니다. spark에는 "org.apache.hbase"% "hbase-server"가 필요합니다. 이 게시물의 목적에 대한 필요가 없습니다 – ogen

+0

SBT와 함께이 예외를 해결하는 방법 있는가? –

답변

1

문제는 SBT와 함께 있던 아래 설정을 추가 할 필요가 있었다.

assemblyMergeStrategy in assembly := { 
    case PathList("META-INF", "MANIFEST.MF") => MergeStrategy.discard 
    case _ => MergeStrategy.first 
}