【问题标题】:flink: scala version conflict?flink:scala版本冲突?
【发布时间】:2015-10-25 20:01:34
【问题描述】:

我正在尝试从 IntelliJ 中的 here 编译 kafka 示例。在对依赖关系大惊小怪之后遇到了这个我似乎无法解决的问题:

15/10/25 12:36:34 ERROR actor.ActorSystemImpl: Uncaught fatal error from thread [flink-akka.actor.default-dispatcher-4] shutting down ActorSystem [flink]
java.lang.NoClassDefFoundError: scala/runtime/AbstractPartialFunction$mcVL$sp
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.flink.runtime.jobmanager.MemoryArchivist.handleMessage(MemoryArchivist.scala:80)
at org.apache.flink.runtime.FlinkActor$class.receive(FlinkActor.scala:32)
at org.apache.flink.runtime.jobmanager.MemoryArchivist.org$apache$flink$runtime$LogMessages$$super$receive(MemoryArchivist.scala:59)
at org.apache.flink.runtime.LogMessages$class.receive(LogMessages.scala:26)
at org.apache.flink.runtime.jobmanager.MemoryArchivist.receive(MemoryArchivist.scala:59)
at akka.actor.ActorCell.newActor(ActorCell.scala:567)
at akka.actor.ActorCell.create(ActorCell.scala:587)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:460)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:482)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:282)
at akka.dispatch.Mailbox.run(Mailbox.scala:223)
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)


Caused by: java.lang.ClassNotFoundException: scala.runtime.AbstractPartialFunction$mcVL$sp
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 28 more

我遇到了一些想法,表明这是 scala 版本的问题。当前库列表:

flink-runtime-1.0-SNAPSHOT
flink-streaming-java-1.0-SNAPSHOT
flink-connector-kafka-1.0-SNAPSHOT
flink-java8-1.0-SNAPSHOT
flink-core-1.0-SNAPSHOT
flink-java-1.0-SNAPSHOT
org.apache.hadoop:hadoop-core:1.2.1
flink-clients-1.0-SNAPSHOT
org.apache.kafka:kafka-clients:0.8.2.2
org.apache.kafka:kafka_2.11:0.8.2.2
flink-optimizer-1.0-SNAPSHOT
org.apache.sling:org.apache.sling.commons.json:2.0.6
de.javakaffee:kryo-serializers:0.28
com.github.scopt:scopt_2.11:3.3.0
org.clapper:grizzled-slf4j_2.9.0:0.6.6
com.typesafe.akka:akka-osgi_2.11:2.4.0
com.typesafe.akka:akka-slf4j_2.11:2.4.0

关于我在哪里误入歧途的建议?

【问题讨论】:

  • 你运行的是哪个操作系统?
  • OSX 10.10.5 ---> 为什么?
  • java -version java version "1.8.0_25" Java(TM) SE Runtime Environment (build 1.8.0_25-b17) Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed模式)
  • 我认为这可能是 java 版本问题(您运行的是较旧的 java)。无论如何,只需确认 scala 没有看到较旧的 java 运行 scala 然后 util.Properties.versionString 然后 util.Properties.javaVersion
  • scala> util.Properties.versionString res0: String = 版本 2.11.6 scala> util.Properties.javaVersion res1: String = 1.8.0_25

标签: java scala intellij-idea apache-flink


【解决方案1】:

问题确实是 Scala 版本不匹配。您正在混合为 Scala 2.11 构建的依赖项,例如org.apache.kafka:kafka_2.11:0.8.2.2 带有 Flink 依赖项,默认为 Scala 2.10 构建。

为 Scala 构建的依赖项之一 2.11 引入了 scala-library:2.11 jar,它替换了 Flink 依赖项所需的 scala-library:2.10 依赖项。您可以使用为 Scala 2.10 构建的二进制文件用于非 Flink 依赖项,或者使用 Scala 2.11 构建和安装 Flink。如何使用不同的 Scala 版本构建 Flink,请参阅 https://ci.apache.org/projects/flink/flink-docs-master/setup/building.html#build-flink-for-a-specific-scala-version

卡夫卡示例

如果您只想将引用的 Kafka 示例的版本提升到 0.10-SNAPSHOT,则必须更改 pom.xml 文件中的 Flink 版本,并且您必须使用 FlinkKafkaProducer 而不是 KafkaSinkWriteIntoKafka.java 文件。你不再需要SimpleStringSchema。这就是您需要更改的全部内容(不需要额外的依赖项)。

【讨论】:

  • 在这种情况下,我只是从站点复制了 kafka-reader 的 java 并(尝试)将 flink-0.10-SNAPSHOT 包裹在它周围。我想我已经清除了对 scala 2.10 的所有引用,但我仍然看到这个错误。会继续寻找。
  • @ethrbunny,清除所有对 Scala 2.10 的引用是什么意思?如果你从 maven Central 拉取 Flink 依赖项,那么你需要 Scala 2.10。也许你可以分享你的pom.xml,然后我可以看到你的尝试。
猜你喜欢
  • 2019-08-07
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 2017-07-26
  • 2021-05-04
相关资源
最近更新 更多