SBT Test Error: java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream
SBT Test Error: java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream
当我尝试使用 scalatest 在 SBT windows 上对我的 spark 流代码执行单元测试时出现异常。
sbt testOnly <<ClassName>>
*
*
*
*
*
*
2018-06-18 02:39:00 ERROR Executor:91 - Exception in task 1.0 in stage 3.0 (TID 11)
java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.(Ljava/io/InputStream;Z)V
at org.apache.spark.io.LZ4CompressionCodec.compressedInputStream(CompressionCodec.scala:122)
at org.apache.spark.serializer.SerializerManager.wrapForCompression(SerializerManager.scala:163)
at org.apache.spark.serializer.SerializerManager.wrapStream(SerializerManager.scala:124)
at org.apache.spark.shuffle.BlockStoreShuffleReader$$anonfun.apply(BlockStoreShuffleReader.scala:50)
at org.apache.spark.shuffle.BlockStoreShuffleReader$$anonfun.apply(BlockStoreShuffleReader.scala:50)
at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:417)
at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:61)
at scala.collection.Iterator$$anon.nextCur(Iterator.scala:435)
at scala.collection.Iterator$$anon.hasNext(Iterator.scala:441)
at scala.collection.Iterator$$anon.hasNext(Iterator.scala:409)
at org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:32)
at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37)
at scala.collection.Iterator$$anon.hasNext(Iterator.scala:409)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.sort_addToSorter$(Unknown Source)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$$anon.hasNext(WholeStageCodegenExec.scala:614)
at org.apache.spark.sql.execution.GroupedIterator$.apply(GroupedIterator.scala:29)
at org.apache.spark.sql.execution.streaming.FlatMapGroupsWithStateExec$StateStoreUpdater.updateStateForKeysWithData(FlatMapGroupsWithStateExec.scala:176)**
尝试了一些方法来排除 net.jpountz.lz4 jar(根据其他帖子的建议),但在输出中再次出现同样的错误。
目前使用spark 2.3,scalatest 3.0.5,Scala 2.11版本。我只在升级到 spark 2.3 和 scalatest 3.0.5 后才看到这个问题
有什么建议吗?
Kafka 与 Spark 的依赖关系存在冲突,这就是导致我出现此问题的原因。
这就是你 exclude 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
当您使用此 kafkaClients
依赖项时,它现在会排除有问题的 lz4 库。
更新:
这似乎是 Kafka 0.11.x.x
和更早版本的问题。从 1.x.x
开始,Kafka 似乎已经不再使用有问题的 net.jpountz.lz4
库。因此,使用最新的 Kafka (1.x) 和最新的 Spark (2.3.x) 应该不会有这个问题。
此工件“net.jpountz.lz4:lz4”已移至:
"org.lz4 » lz4-java"
通过使用;
libraryDependencies += "org.lz4" % "lz4-java" % "1.7.1", 问题已解决
当我尝试使用 scalatest 在 SBT windows 上对我的 spark 流代码执行单元测试时出现异常。
sbt testOnly <<ClassName>>
*
*
*
*
*
*2018-06-18 02:39:00 ERROR Executor:91 - Exception in task 1.0 in stage 3.0 (TID 11) java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.(Ljava/io/InputStream;Z)V at org.apache.spark.io.LZ4CompressionCodec.compressedInputStream(CompressionCodec.scala:122) at org.apache.spark.serializer.SerializerManager.wrapForCompression(SerializerManager.scala:163) at org.apache.spark.serializer.SerializerManager.wrapStream(SerializerManager.scala:124) at org.apache.spark.shuffle.BlockStoreShuffleReader$$anonfun.apply(BlockStoreShuffleReader.scala:50) at org.apache.spark.shuffle.BlockStoreShuffleReader$$anonfun.apply(BlockStoreShuffleReader.scala:50) at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:417) at org.apache.spark.storage.ShuffleBlockFetcherIterator.next(ShuffleBlockFetcherIterator.scala:61) at scala.collection.Iterator$$anon.nextCur(Iterator.scala:435) at scala.collection.Iterator$$anon.hasNext(Iterator.scala:441) at scala.collection.Iterator$$anon.hasNext(Iterator.scala:409) at org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:32) at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37) at scala.collection.Iterator$$anon.hasNext(Iterator.scala:409) at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.sort_addToSorter$(Unknown Source) at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source) at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$$anon.hasNext(WholeStageCodegenExec.scala:614) at org.apache.spark.sql.execution.GroupedIterator$.apply(GroupedIterator.scala:29) at org.apache.spark.sql.execution.streaming.FlatMapGroupsWithStateExec$StateStoreUpdater.updateStateForKeysWithData(FlatMapGroupsWithStateExec.scala:176)**
尝试了一些方法来排除 net.jpountz.lz4 jar(根据其他帖子的建议),但在输出中再次出现同样的错误。
目前使用spark 2.3,scalatest 3.0.5,Scala 2.11版本。我只在升级到 spark 2.3 和 scalatest 3.0.5 后才看到这个问题
有什么建议吗?
Kafka 与 Spark 的依赖关系存在冲突,这就是导致我出现此问题的原因。
这就是你 exclude 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
当您使用此 kafkaClients
依赖项时,它现在会排除有问题的 lz4 库。
更新:
这似乎是 Kafka 0.11.x.x
和更早版本的问题。从 1.x.x
开始,Kafka 似乎已经不再使用有问题的 net.jpountz.lz4
库。因此,使用最新的 Kafka (1.x) 和最新的 Spark (2.3.x) 应该不会有这个问题。
此工件“net.jpountz.lz4:lz4”已移至: "org.lz4 » lz4-java"
通过使用; libraryDependencies += "org.lz4" % "lz4-java" % "1.7.1", 问题已解决