0

Ich habe Probleme mit Verify Errors mit diesem Beispielprojekt unter Verwendung von Scio/Bigtable/HBase. Der Abhängigkeitsbaum benötigt die protobuf-Version (2.5, 2.6.1, 3.0, 3.1) und scheint standardmäßig auf 3.2 zu setzen. Ich habe die Shading-Komponente von sbt-assembly verwendet, nicht sicher, ob ich richtig damit bin.SBT Verify Fehler verursacht durch mehrere Protobuf 2/3 Abhängigkeiten trotz Shading

Mein 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 
} 

Mein 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) 
    } 
} 

Ausgänge:

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) 

Was mache ich falsch?

Danke für Ihre Hilfe

Antwort

0

Scio hat ein BigTable Artefakt, die Sie über können sein:

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

Normalerweise gibt es keine Notwendigkeit für die anderen Abhängigkeiten ist Bigtable zu verwenden, sie in der Tat verursachen könnten Probleme.

Stellen Sie sicher, BigTable Paket über importieren: Diese BigtableExample

import com.spotify.scio.bigtable._ 

prüfen.

Seitennotiz möchten Sie vielleicht sbt-pack einen Versuch geben statt sbt-assembly, Artefakt-Caching vollständig zu nutzen. Für ein Beispiel für die Installation von sbt überprüfen Sie die Vorlage here.

+0

Vielen Dank für Ihre Antwort. Mein Beitrag war nicht sehr klar, aber im obigen Code habe ich den Bigtable-Client außerhalb von scio verwendet. Die Verwendung des BigTable-Clients über Scio funktioniert mit Ihrer Abhängigkeit. – ogen

1

Das Abhängigkeitsproblem ist ein Problem für den Cloud Bigtable HBase-Client. Wir werden es in der nächsten Version beheben. Um Ihr aktuelles Problem zu beheben, importieren Sie "bigtable-hbase" statt "bigtable-hbase-1.2"

Auch würde ich vorschlagen, die neueste Version des Clients ist möglich, die 0.9.7.1 ist.

+0

Danke für Ihre Antwort. Mit Ihrer Abhängigkeitsersetzung ist Adapter nicht mehr importierbar ... – ogen

+0

Ugh ... Adapter wird in ein anderes Paket verschoben, und so auch die Protobuf-Objekte. Das tut mir leid. Sie können stattdessen 'bigtable-hbase' verwenden. –

+0

Danke für Ihre Antwort, bekommt einen anderen Fehler 'java.lang.NoSuchMethodError: shadeio.bigtable.v2.RowRange $ Builder.setStartKeyClosed (Lshadeio/bigtable/repackaged/com/google/protobuf/ByteString;) Lshadeio/bigtable/v2/RowRange $ Builder'. Dies kann mit einem Konflikt in 2+ Versionen von Protobuf zusammenhängen. – ogen

Verwandte Themen