0

我正在使用Scio/Bigtable/HBase與下面的這個示例項目驗證錯誤。依賴關係樹需要protobuf版本(2.5,2.6.1,3.0,3.1),並且似乎默認爲3.2。我使用了sbt-assembly的陰影部分,不確定我是否正確。SBT驗證由多個protobuf 2/3依賴關係造成的錯誤(儘管有陰影)

build.sbt

name := "scalalab" 

version := "1.0" 

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "com.spotify" %% "scio-core" % "0.3.2", 
    "com.google.cloud.bigtable" % "bigtable-hbase-1.2" % "0.9.2", 
    "org.apache.hbase" % "hbase-client" % "1.2.5", 
    "org.apache.hbase" % "hbase-common" % "1.2.5", 
    "org.apache.hadoop" % "hadoop-common" % "2.7.3" 
) 

assemblyShadeRules in assembly := Seq(
    ShadeRule.rename("com.google.**" -> "[email protected]").inAll 
) 

assemblyMergeStrategy in assembly := { 
    case x => MergeStrategy.first 
} 

Main.scala

import com.google.cloud.bigtable.hbase.adapters.Adapters 
import com.google.cloud.bigtable.hbase.adapters.read.DefaultReadHooks 
import org.apache.hadoop.hbase.client.Scan 

object Main { 
    def main(args: Array[String]): Unit = { 
    val scan = new Scan 
    scan.setMaxVersions() 
    scan.addFamily("family".getBytes) 
    scan.setRowPrefixFilter("prefix".getBytes) 

    val builder = Adapters.SCAN_ADAPTER.adapt(scan, new DefaultReadHooks) 

    System.out.println(builder) 
    } 
} 

輸出到:

scalalab git:(master) ? java -cp .:target/scala-2.11/scalalab-assembly-1.0.jar Main 
Exception in thread "main" java.lang.VerifyError: Bad return type 
Exception Details: 
    Location: 
    shadeio/cloud/bigtable/hbase/adapters/AppendAdapter.adapt(Lorg/apache/hadoop/hbase/client/Operation;)Lshadeio/bigtable/repackaged/com/google/protobuf/GeneratedMessageV3$Builder; @8: areturn 
    Reason: 
    Type 'shadeio/bigtable/v2/ReadModifyWriteRowRequest$Builder' (current frame, stack[0]) is not assignable to 'shadeio/bigtable/repackaged/com/google/protobuf/GeneratedMessageV3$Builder' (from method signature) 
    Current Frame: 
    bci: @8 
    flags: { } 
    locals: { 'shadeio/cloud/bigtable/hbase/adapters/AppendAdapter', 'org/apache/hadoop/hbase/client/Operation' } 
    stack: { 'shadeio/bigtable/v2/ReadModifyWriteRowRequest$Builder' } 
    Bytecode: 
    0x0000000: 2a2b c000 28b6 00a0 b0 

     at shadeio.cloud.bigtable.hbase.adapters.Adapters.<clinit>(Adapters.java:40) 
     at Main$.main(Main.scala:12) 
     at Main.main(Main.scala) 

我在做什麼錯?

感謝您的幫助

回答

0

新聞發佈工作有了BigTable神器,它可以包括通過:

libraryDependencies ++= Seq(
    "com.spotify" %% "scio-core" % "0.3.2", 
    "com.spotify" %% "scio-bigtable" % "0.3.2" 
) 

通常情況下,沒有必要對其他依賴使用Bigtable的,事實上,他們可能會引起的問題。

確保然後通過導入BigTable中包:

import com.spotify.scio.bigtable._ 

檢查這個BigtableExample

請注意,您可能想嘗試使用sbt-pack而不是sbt-assembly以充分利用工件緩存。有關sbt設置的示例,請檢查模板here

+0

感謝您的回覆。我的帖子不是很清楚,但在上面的代碼中,我使用了scio之外的Bigtable客戶端。通過Scio使用bigtable客戶端可以處理您的依賴關係。 – ogen

1

依賴性問題對於Cloud Bigtable HBase客戶端而言是一個痛苦。我們將在下一個版本中修復它。要解決你目前的問題,導入「bigtable-hbase」而不是「bigtable-hbase-1.2」

另外,我建議使用最新版本的客戶端是可能的,這是0.9.7.1。

+0

感謝您的回覆。隨着您的依賴替換,適配器不再是可導入的... – ogen

+0

呃...適配器被移動到不同的包中,並且protobuf對象也是如此。對於那個很抱歉。你可以使用'bigtable-hbase'來代替。 –

+0

感謝您的回覆,獲取另一個錯誤'java.lang.NoSuchMethodError:shadeio.bigtable.v2.RowRange $ Builder.setStartKeyClosed(Lshadeio/bigtable/repackaged/com/google/protobuf/ByteString;)Lshadeio/bigtable/v2/RowRange $ Builder'。這可能與2版本protobuf中的conflit有關。 – ogen