首页 文章

使用最新版“json4s-jackson”的“ExceptionInInitializerError”Spark单元测试失败

提问于
浏览
1

我们在下面的框架中编写了一些spark / scala单元测试用例: - https://github.com/holdenk/spark-testing-base

对于我们的一些功能,我们将“json4s-jackson”升级到“3.5.3” - 将jackson版本升级到最新版本后,我们所有的单元测试用例都失败,出现以下错误:

[info] #getPageViewWithMember [info] com.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec * ABORTED * [info] java.lang.ExceptionInInitializerError:[info] at org.apache.spark.sql.execution.SparkPlan.executeQuery( SparkPlan.scala:132)[info] atg.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:113)[info] at org.apache.spark.sql.execution.SparkPlan.getByteArrayRdd(SparkPlan . scala:225)[info] org.apache.spark.sql.execution.SparkPlan.executeCollect(SparkPlan.scala:272)[info] at org.apache.spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$执行$ 1 $ 1.apply(Dataset.scala:2386)[info] atg.apache.spark.sql.execution.SQLExecution $ .withNewExecutionId(SQLExecution.scala:57)[info] at org.apache .spark.sql.Dataset.withNewExecutionId(Dataset.scala:2788)[info] at org.apache.spark.sql.Dataset.org $ apache $ spark $ sql $ Dataset $$ execute $ 1(Dataset.scala:2385)[ info] at org.apache.spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$ collect $ 1.apply(Dataset .scala:2390)[info] at org.apache.spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$ collect $ 1.apply(Dataset.scala:2390)[info] ... [info]原因:com.fasterxml.jackson.databind.JsonMappingException:不兼容的Jackson版本:2.8.4 [info] at com.fasterxml.jackson.module.scala.JacksonModule $ class.setupModule(JacksonModule.scala:64)[info ] com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19)[info] at org . 在com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:745)[info] . apache.spark.rdd.RDDOperationScope $ . (RDDOperationScope.scala:82)[info] org.apache.spark.rdd.RDDOperationScope $ . (RDDOperationScope.scala)[info] at org.apache.spark.sql.execution . SparkPlan.executeQuery(SparkPlan.scala:132)[info] atg.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:113)[info] at org.apache.spark.sql.execution.SparkPlan . getByteArrayRdd(SparkPlan.scala:225)[info] at org.apache.spark.sql.execution.SparkPlan.ex ecuteCollect(SparkPlan.scala:272)[info] at org.apache.spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$ execute $ 1 $ 1.apply(Dataset.scala:2386)[info ] ... org.apache.spark中的org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:132)中的java.lang.ExceptionInInitializerError.SparkPlan.execute(SparkPlan.scala:113) )org.apache.spache.sql.exe . 执行 . 或者在org.apache.spark上的org.apache.spark.sql.exe.SparkPlan.executeCollect(SparkPlan.scala:272)中的org.apache.spark.sql.execution.SparkPlan.getByteArrayRdd(SparkPlan.scala:225) . sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$执行$ 1 $ 1.apply(Dataset.scala:2386)org.apache.spark.sql.execution.SQLExecution $ .withNewExecutionId(SQLExecution.scala: 57)org.apache.spark.sql.Dataset.withNewExecutionId(Dataset.scala:2788)at org.apache.spark.sql.Dataset.org $ apache $ spark $ sql $ Dataset $$ execute $ 1(Dataset.scala: 2385)atg.apache.spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$在org.apache.spark收集$ 1.apply(Dataset.scala:2390) . sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$在org.apache.spark.sql.Dataset.withCallback(Dataset.scala:2801)收集$ 1.apply(Dataset.scala:2390)atg .apache.spark.sql.Dataset.org $ apache $ spark $ sql $ dataset $$ collect(Dataset.scala:2390)位于com的org.apache.spark.sql.Dataset.collect(Dataset.scala:2366) . tes.org中的testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec $$ anonfun $ 2.apply(CloudfrontLogProcessorJobSpec.scala:101)位于org的com.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec $$ anonfun $ 2.apply(CloudfrontLogProcessorJobSpec.scala:88) . scalatest.OutcomeOf $ class.outcomeOf(OutcomeOf.scala:85)atg.scalatest.OutcomeOf $ .outcomeOf(OutcomeOf.scala:104)org.scalatest.Transformer.apply(Transformer.scala:22)at org.scalatest . Transformer.apply(Transformer.scala:20)atg.scalatest.FlatSpecLike $$ anon $ 1.apply(FlatSpecLike.scala:1682)atg.scalatest.TestSuite $ class.withFixture(TestSuite.scala:196)at org.scalatest .FlatSpec.withFixture(FlatSpec.scala:1685)at org.scalatest.FlatSpecLike $ class.invokeWithFixture $ 1(FlatSpecLike.scala:1679)org.scalatest.FlatSpecLike $$ anonfun $ runTest $ 1.apply(FlatSpecLike.scala:1692)at org.scalatest.FlatSpecLike $$ anonfun $ runTest $ 1 .apply(FlatSpecLike.scala:1692)atg.scalatest.SuperEngine.runTestImpl(Engine.scala:289)atg.scalatest.FlatSpecLike $ class.runTest(FlatSpecLike.scala:1692)at com.testrunner.data.processors . cloudfront.CloudfrontLogProcessorJobSpec.org $ scalatest $ BeforeAndAfterEach $$ super $ runTest(CloudfrontLogProcessorJobSpec.scala:16)at org.scalatest.BeforeAndAfterEach $ class.runTest(BeforeAndAfterEach.scala:221)atcom.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec.runTest(CloudfrontLogProcessorJobSpec.scala:16)atg.scalatest.FlatSpecLike $$ anonfun $ runTests $ 1.apply(FlatSpecLike.scala:1750)at org.scalatest.FlatSpecLike $$ anonfun $ runTests $ 1.apply(FlatSpecLike.scala:1750)at org.scalatest.SuperEngine $$ anonfun $ traverseSubNodes $ 1 $ 1.apply(Engine.scala:396)at org.scalatest.SuperEngine $$ anonfun $ traverseSubNodes $ 1 $ 1.apply( Engine.scala:384)在org.scalatest.SuperEngine.traverseSubNodes的scala.collection.immutable.List.foreach(List.scala:381)org.scalatest.SuperEngine.org $ 1(Engine.scala:384)$ scalatest $ SuperEngine $$ runTestsInBranch(Engine.scala:373)org.scalatest.SuperEngine $$ anonfun $ traverseSubNodes $ 1 $ 1.apply(Engine.scala:410)at org.scalatest.SuperEngine $$ anonfun $ traverseSubNodes $ 1 $ 1.apply(Engine .scala:384)scara.collection.immutable.List.foreach(List.scala:381)atg.scalatest.SuperEngine.traverseSubNodes $ 1(Engine.scala:384)at org.scalatest.SuperEngine.org $ scalatest $ Su perEngine $$ runTestsInBranch(Engine.scala:379)org.scalatest.SuperEngine.runTestsImpl(Engine.scala:461)atg.scalatest.FlatSpecLike $ class.runTests(FlatSpecLike.scala:1750)at org.scalatest.FlatSpec . runTests(FlatSpec.scala:1685)at org.scalatest.Suite $ class.run(Suite.scala:1147)at org.scalatest.FlatSpec.org $ scalatest $ FlatSpecLike $$ super $ run(FlatSpec.scala:1685)at at org.scalatest.FlatSpecLike $$ anonfun $ run $ 1.apply(FlatSpecLike.scala:1795)org.scalatest.FlatSpecLike $$ anonfun $ run $ 1.apply(FlatSpecLike.scala:1795)at org.scalatest.SuperEngine.runImpl( Engine.scala:521)org.scalatest.FlatSpecLike $ class.run(FlatSpecLike.scala:1795)at com.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec.org $ scalatest $ BeforeAndAfterAll $$ super $ run(CloudfrontLogProcessorJobSpec.scala :16)在org.scalatest.BeforeAndAfterAll $ class.liftedTree1 $ 1(BeforeAndAfterAll.scala:213)org.scalatest.BeforeAndAfterAll $ class.run(BeforeAndAfterAll.scala:210)at com.testrunner.data.processors.cloudfront位于org.scalatest.tools.Framework.org的.CloudfrontLogProcessorJobSpec.run(CloudfrontLogProcessorJobSpec.scala:16)$ scalatest $ tools $ framework $ runSuite(Framework.scala:314)org.scalatest.tools.Framework $ ScalaTestTask.execute( Framework.scala:480)at sbt.TestRunner.runTest $ 1(TestFramework.scala:76)at sbt.TestRunner.run(TestFramework.scala:85)at sbt.TestFramework $$ anon $ 2 $$ anonfun $$ init $$ 1 $ $ anonfun $ apply $ 8.apply(TestFramework.scala:202)at sbt.TestFramework $$ anon $ 2 $$ anonfun $$ init $$ 1 $$ anonfun $ apply $ 8.apply(TestFramework.scala:202)at sbt.TestFramework $ .sbt $ TestFramework $$ withContextLoader(TestFramework.scala:185)at sbt.TestFramework $$ anon $ 2 $$ anonfun $$ init $$ 1.apply(TestFramework.scala:202)at sbt.TestFramework $$ anon $ 2 $$ anonfun $$ init $$ 1.apply(TestFramework.scala:202)at sbt.TestFunction.apply(TestFramework.scala:207)at sbt.Tests $ .sbt $在sbt测试$$ processRunnable $ 1(Tests.scala:239) . 在sbt.Tests $$ anonfun $ makeSerial $ 1.apply(Tests.scala:245)测试$$ anonfun $ makeSerial $ 1.apply(Tests.scala:245) at sbt.std.Transform $$ anon $ 3 $$ anonfun $ apply $ 2.apply(System.scala:44)at sbt.std.Transform $$ anon $ 3 $$ anonfun $ apply $ 2.apply(System.scala:44) at sbt.std.Transform $$ anon $ 4.work(System.scala:63)at sbt.Execute $$ anonfun $ submit $ 1 $$ anonfun $ apply $ 1.apply(Execute.scala:228)at sbt.Execute $$ anonfun $提交$ 1 $$ anonfun $在sbt.Execute执行$ 1.apply(Execute.scala:228)sbt.ErrorHandling $ .wideConvert(ErrorHandling.scala:17)sbt.Execute.work(Execute.scala:237)at sbt.Execute $$ anonfun $提交$ 1.apply(Execute.scala:228)at sbt.Execute $$ anonfun $ submit $ 1.apply(Execute.scala:228)at sbt.ConcurrentRestrictions $$ anon $ 4 $$ anonfun $ 1.apply(ConcurrentRestrictions .scala:159)at sbt.CompletionService $$ anon $ 2.call(CompletionService.scala:28)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.Executors $ RunnableAdapter . 调用(Executors.java:511)java.util.concurrent.FutureTask.run(FutureTask.java:266),java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142),java.util.co ncurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:748)引起:com.fasterxml.jackson.databind.JsonMappingException:不兼容的Jackson版本:2.8.4 at com.fasterxml.jackson.module.scala.JacksonModule $ class.setupModule(JacksonModule.scala:64)位于com.fasterxml.jackson的com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:19) . 位于org.apache.spark.rdd.RDDOperationScope $ . (RDDOperationScope.scala:82)的databind.ObjectMapper.registerModule(ObjectMapper.java:745)org.apache.spark.rdd.RDDOperationScope $ . (RDDOperationScope.scala)at org位于org.apache.spark.sql.execution的org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:113)的.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:132) .SparkPlan.getByteArrayRdd(SparkPlan.scala:225)在org.apache.spark.sql.execution.SparkPlan.executeCollect(SparkPlan.scala:272)at atorg.apache.spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$执行$ 1 $ 1.apply(Dataset.scala:2386)org.apache.spark.sql.execution.SQLExecution $ . withNewExecutionId(SQLExecution.scala:57)org.apache.spark.sql.Dataset.withNewExecutionId(Dataset.scala:2788)org.apache.spark.sql.Dataset.org $ apache $ spark $ sql $ Dataset $$ execute $ 1(Dataset.scala:2385)atg.apache.spark.sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$在org.apache.spark收集$ 1.apply(Dataset.scala:2390) .sql.Dataset $$ anonfun $ org $ apache $ spark $ sql $ Dataset $$收集$ 1.apply(Dataset.scala:2390)at org.apache.spark.sql.Dataset.withCallback(Dataset.scala:2801)at at org.apache.spark.sql.Dataset.org $ apache $ spark $ sql $ dataset $$ collect(Dataset.scala:2390)at org.apache.spark.sql.Dataset.collect(Dataset.scala:2366)at com .testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec $$ anonfun $ 2.apply(CloudfrontLogProcessorJobSpec.scala:101)at com.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec $$ ano nfun $ 2.apply(CloudfrontLogProcessorJobSpec.scala:88)org.scalatest.OutcomeOf $ class.outcomeOf(OutcomeOf.scala:85)atg.scalatest.OutcomeOf $ .outcomeOf(OutcomeOf.scala:104)at org.scalatest.Transformer .apply(Transformer.scala:22)atg.scalatest.Transformer.apply(Transformer.scala:20)org.scalatest.FlatSpecLike $$ anon $ 1.apply(FlatSpecLike.scala:1682)at org.scalatest.TestSuite $ class.withFixture(TestSuite.scala:196)atg.scalatest.FlatSpec.withFixture(FlatSpec.scala:1685)atg.scalatest.FlatSpecLike $ class.invokeWithFixture $ 1(FlatSpecLike.scala:1679)at org.scalatest.FlatSpecLike $ $ anonfun $ runTest $ 1.apply(FlatSpecLike.scala:1692)org.scalatest.FlatSpecLike $$ anonfun $ runTest $ 1.apply(FlatSpecLike.scala:1692)at org.scalatest.SuperEngine.runTestImpl(Engine.scala:289) at org.scalatest.FlatSpecLike $ class.runTest(FlatSpecLike.scala:1692)at com.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec.org $ scalatest $ BeforeAndAfterEach $$ super $ runTest(CloudfrontLogProcessorJob) Spec.scala:16)atg.scalatest.BeforeAndAfterEach $ class.runTest(BeforeAndAfterEach.scala:221)at com.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec.runTest(CloudfrontLogProcessorJobSpec.scala:16)at org.scalatest.FlatSpecLike $$ anonfun $ runTests $ 1.apply(FlatSpecLike.scala:1750)org.scalatest.FlatSpecLike $$ anonfun $ runTests $ 1.apply(FlatSpecLike.scala:1750)at org.scalatest.SuperEngine $$ anonfun $ traverseSubNodes $ 1 $ 1 . apply(Engine.scala:396)org.scalatest.SuperEngine $$ anonfun $ traverseSubNodes $ 1 $ 1.apply(Engine.scala:384)at org的scala.collection.immutable.List.foreach(List.scala:381) . scalatest.SuperEngine.traverseSubNodes $ 1(Engine.scala:384)at org.scalatest.SuperEngine.org $ scalatest $ SuperEngine $$ runTestsInBranch(Engine.scala:373)at org.scalatest.SuperEngine $$ anonfun $ traverseSubNodes $ 1 $ 1.apply (Engine.scala:410)atg.scalatest.SuperEngine $$ anonfun $ traverseSubNodes $ 1 $ 1.apply(Engine.scala:384)at org.scalat的scala.collection.immutable.List.foreach(List.scala:381) est.SuperEngine.traverseSubNodes $ 1(Engine.scala:384)org.scalatest.SuperEngine.org $ scalatest $ SuperEngine $$ runTestsInBranch(Engine.scala:379)at org.scalatest.SuperEngine.runTestsImpl(Engine.scala:461) at org.scalatest.FlatSpecLike $ class.runTests(FlatSpecLike.scala:1750)at org.scalatest.FlatSpec.runTests(FlatSpec.scala:1685)at org.scalatest.Suite $ class.run(Suite.scala:1147)at at org.scalatest.FlatSpec.org $ scalatest $ FlatSpecLike $$ super $ run(FlatSpec.scala:1685)at org.scalatest.FlatSpecLike $$ anonfun $ run $ 1.apply(FlatSpecLike.scala:1795)at org.scalatest.FlatSpecLike $$ anonfun $运行$ 1.apply(FlatSpecLike.scala:1795)org.scalatest.SuperEngine.runImpl(Engine.scala:521)org.scalatest.FlatSpecLike $ class.run(FlatSpecLike.scala:1795)at com . testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec.org $ scalatest $ BeforeAndAfterAll $$ super $ run(CloudfrontLogProcessorJobSpec.scala:16)org.scalatest.BeforeAndAfterAll $ class.liftedTree1 $ 1(BeforeAndAfterAll.scala:213)org.scalatest . BEF oreAndAfterAll $ class.run(BeforeAndAfterAll.scala:210)at com.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec.run(CloudfrontLogProcessorJobSpec.scala:16)at org.scalatest.tools.Framework.org $ scalatest $ tools $ Framework $ $ runSuite(Framework.scala:314)at orb.scalatest.tools.Framework $ ScalaTestTask.execute(Framework.scala:480)at sbt.TestRunner.runTest $ 1(TestFramework.scala:76)at sbt.TestRunner.run(TestFramework) .scala:85)at sbt.TestFramework $$ anon $ 2 $$ anonfun $$ init $$ 1 $$ anonfun $ apply $ 8.apply(TestFramework.scala:202)at sbt.TestFramework $$ anon $ 2 $$ anonfun $$ init $$ 1 $$ anonfun $应用$ 8.apply(TestFramework.scala:202)在sbt.TestFramework $ .sbt $ TestFramework $$ withContextLoader(TestFramework.scala:185)at sbt.TestFramework $$ anon $ 2 $$ anonfun $$ init $$ 1.apply(TestFramework.scala:202)at sbt.TestFramework $$ anon $ 2 $$ anonfun $$ init $$ 1.apply(TestFramework.scala:202)at sbt.TestFunction.apply(TestFramework.scala:207)at at sbt.Tests $ .sbt $测试$$ processRunnable $ 1(Tests.scala:239)at atsbt.Tests $$ anonfun $ makeSerial $ 1.apply(Tests.scala:245)at sbt.Tests $$ anonfun $ makeSerial $ 1.apply(Tests.scala:245)at sbt.std.Transform $$ anon $ 3 $$ anonfun在sbt.std.Transform $ anon $ 3 $$ anonfun $ apply $ 2.apply(System.scala:44)申请$ 2.apply(System.scala:44)在sbt.std.Transform $$ anon $ 4.work( System.scala:63)at sbt.Execute $$ anonfun $ submit $ 1 $$ anonfun $ apply $ 1.apply(Execute.scala:228)at sbt.Execute $$ anonfun $ submit $ 1 $$ anonfun $ apply $ 1.apply( Execute.scala:228)sbt.ErrorHandling $ .wideConvert(ErrorHandling.scala:17)at sbt.Execute.work(Execute.scala:237)at sbt.Execute $$ anonfun $ submit $ 1.apply(Execute.scala: 228)at sbt.Execute $$ anonfun $ submit $ 1.apply(Execute.scala:228)at sbt.ConcurrentRestrictions $$ anon $ 4 $$ anonfun $ 1.apply(ConcurrentRestrictions.scala:159)at sbt.CompletionService $$ anon $ 2 .call(CompletionService.scala:28)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.Executors $ runnableAdapter.call(Executors.java:511)at java.util . concurrent.FutureTask.run(未来Task.java:266)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run (Thread.java:748)[错误]无法运行测试com.testrunner.data.processors.cloudfront.CloudfrontLogProcessorJobSpec:java.lang.ExceptionInInitializerError

1 回答

  • 1

    我们似乎能够弄明白:

    我们可以在build.sbt中添加以下行来覆盖测试范围中的jackson版本:

    dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-core" % "2.6.5" % "test"
    dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-databind" % "2.6.5" % "test"
    dependencyOverrides += "com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.6.5" % "test"
    

相关问题