web-dev-qa-db-fra.com

Erreur de test SBT: Java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream

Obtention de l'exception ci-dessous, lorsque j'ai essayé d'effectuer des tests unitaires pour mon spark code de streaming sur les fenêtres SBT en utilisant scalatest.

sbt testOnly <<ClassName>>

*
*
*
*
*
*

2018-06-18 02:39:00 ERREUR Exécuteur: 91 - Exception dans la tâche 1.0 à l'étape 3.0 (TID 11) Java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream. (Ljava/io/InputStream; Z) V à org.Apache.spark.io.LZ4CompressionCodec.compressedInputStream (CompressionCodec.scala: 122) à org.Apache.spark.serializer.SerializerManager.wrapForCompression (SerializerManager.scala: 163) à org.Apache.spark.serializer.SrapizerSeamizerManager (SerializerManager.scala: 124) sur org.Apache.spark.shuffle.BlockStoreShuffleReader $$ anonfun $ 2.apply (BlockStoreShuffleReader.scala: 50) sur org.Apache.spark.shuffle.BlockStoreShuffleReader $$ anonfun $Shapple (BlockStead : 50) sur org.Apache.spark.storage.ShuffleBlockFetcherIterator.next (ShuffleBlockFetcherIterator.scala: 417) sur org.Apache.spark.storage.ShuffleBlockFetcherIterator.next (ShuffleBlockFetcherIterator.scala: 61) sur scala $$. $ 12.nextCur (Iterator.scala: 435) sur scala.collection.Iterator $$ anon $ 12.hasNext (Iterator.scala: 441) sur scala. collection.Iterator $$ anon $ 11.hasNext (Iterator.scala: 409) at org.Apache.spark.util.CompletionIterator.hasNext (CompletionIterator.scala: 32) at org.Apache.spark.InterruptibleIterator.hasNext (InterruptibleIterator.scala: 37) sur scala.collection.Iterator $$ anon $ 11.hasNext (Iterator.scala: 409) sur org.Apache.spark.sql.catalyst.expressions.GeneratedClass $ GeneratedIteratorForCodegenStage1.sort_addToSorter $ (Source inconnue) sur org.Apache.spark .sql.catalyst.expressions.GeneratedClass $ GeneratedIteratorForCodegenStage1.processNext (Source inconnue) sur org.Apache.spark.sql.execution.BufferedRowIterator.hasNext (BufferedRowIterator.Java:43) sur org.Apache.spark.sqlExecution $ anonfun $ 10 $$ anon $ 1.hasNext (WholeStageCodegenExec.scala: 614) sur org.Apache.spark.sql.execution.GroupedIterator $ .apply (GroupedIterator.scala: 29) sur org.Apache.spark.sql.execution.streaming .FlatMapGroupsWithStateExec $ StateStoreUpdater.updateStateForKeysWithData (FlatMapGroupsWithStateExec.scala: 176) **

J'ai essayé quelques choses pour exclure le pot net.jpountz.lz4 (avec des suggestions d'autres articles) mais encore une fois la même erreur de sortie.

J'utilise actuellement spark 2.3, scalatest 3.0.5, Scala 2.11 version. Je vois ce problème uniquement après la mise à niveau vers spark 2.3 et scalatest 3.0.5

Aucune suggestion ?

13
KK2486

Kafka a une dépendance conflictuelle avec Spark et c'est ce qui m'a causé ce problème.

Voici comment vous pouvez exclure la dépendance dans votre fichier sbt

lazy val excludeJpountz = ExclusionRule(organization = "net.jpountz.lz4", name = "lz4")

lazy val kafkaClients = "org.Apache.kafka" % "kafka-clients" % userKafkaVersionHere excludeAll(excludeJpountz) // add more exclusions here

Lorsque vous utilisez cette dépendance kafkaClients, elle exclut désormais la bibliothèque lz4 problématique.


Mise à jour: Cela semble être un problème avec Kafka 0.11.x.x et versions antérieures. À partir du 1.x.x Kafka semble s'être éloigné de l'utilisation de la problématique net.jpountz.lz4 bibliothèque. Par conséquent, l'utilisation de la dernière Kafka (1.x) avec la dernière Spark (2.3.x) ne devrait pas avoir ce problème.

24
marios