Kafka + Storm - 满足依赖性

时间:2015-06-08 03:20:53

标签: java scala apache-storm

我正在尝试将我的第一个拓扑部署到风暴群集,作为我公司评估的一部分。拓扑结构只是从 kafka 获取值并将它们放入 cassandra redis

在复制大量的.jar文件以尝试满足各种依赖项后,我遇到了一个问题,其中风暴声称缺少依赖项,但日志中的启动类列表显示了该类可用。

以下是例外:

  

java.lang.NoClassDefFoundError:scala / collection / GenTraversableOnce $ class
          在kafka.utils.Pool。(Pool.scala:28)〜[kafka_2.10-0.8.1.1.jar:na]
          在kafka.consumer.FetchRequestAndResponseStatsRegistry $。   〜[kafka_2.10-0.8.1.1.jar:NA]
          at kafka.consumer.FetchRequestAndResponseStatsRegistry $。(FetchRequestAndResponseStats.scala)〜[kafka_2.10-0.8.1.1.jar:na]
          在kafka.consumer.SimpleConsumer。(SimpleConsumer.scala:39)〜[kafka_2.10-0.8.1.1.jar:na]
          在kafka.javaapi.consumer.SimpleConsumer。(SimpleConsumer.scala:34)〜[kafka_2.10-0.8.1.1.jar:na]
          在storm.kafka.DynamicPartitionConnections.register(DynamicPartitionConnections.java:60)〜[storm-kafka-0.9.4.jar:0.9.4]
          在storm.kafka.PartitionManager。(PartitionManager.java:64)〜[storm-kafka-0.9.4.jar:0.9.4]
          在storm.kafka.ZkCoordinator.refresh(ZkCoordinator.java:98)〜[storm-kafka-0.9.4.jar:0.9.4]
          在storm.kafka.ZkCoordinator.getMyManagedPartitions(ZkCoordinator.java:69)〜[storm-kafka-0.9.4.jar:0.9.4]
          在storm.kafka.KafkaSpout.nextTuple(KafkaSpout.java:135)〜[storm-kafka-0.9.4.jar:0.9.4]
          at backtype.storm.daemon.executor $ fn__4654 $ fn__4669 $ fn__4698.invoke(executor.clj:565)〜[storm-core-0.9.4.jar:0.9.4]
          at backtype.storm.util $ async_loop $ fn__458.invoke(util.clj:463)〜[storm-core-0.9.4.jar:0.9.4]
          在clojure.lang.AFn.run(AFn.java:24)[clojure-1.5.1.jar:na]           在java.lang.Thread.run(Thread.java:745)[na:1.8.0_45]

     

引起:java.lang.ClassNotFoundException:scala.collection.GenTraversableOnce $ class           在java.net.URLClassLoader.findClass(URLClassLoader.java:381)〜[na:1.8.0_45]
          在java.lang.ClassLoader.loadClass(ClassLoader.java:424)〜[na:1.8.0_45]
          在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)〜[na:1.8.0_45]
          在java.lang.ClassLoader.loadClass(ClassLoader.java:357)〜[na:1.8.0_45]

当我查看主管线程的启动信息时,我看到了:

  

2015-06-07T07:55:19.941-0700 oazZooKeeper [INFO]客户端环境:java.class.path = ... /usr/local/src/apache-storm-0.9.4/lib/scala- library-2.11.6.jar:...

当我打开这个文件时,我看到了这个条目:

  

-rwxrwxrwx 0 0 0 0 2014年3月18日scala / collection / GenTraversableOnce.class

所以别的不对劲。我错过了哪些步骤?

注意:类似的问题来自org / jboss / netty / channel / ChannelFactory ..

2 个答案:

答案 0 :(得分:0)

Kafka版本指定了构建它的Scala版本。

  

Scala 2.10 - kafka_2.10-0.9.0.1.tgz(asc,md5)

     

Scala 2.11 - kafka_2.11-0.9.0.1.tgz(asc,md5)

我犯了将scala 2.10与kafka 2.11一起使用的错误。 我能够通过将我的maven依赖性纠正为正确的scala和kafka组合来解决这个问题。

答案 1 :(得分:0)

  

发行说明来源下载:kafka-0.11.0.1-src.tgz(asc,md5)

Binary downloads: Scala 2.11  - kafka_2.11-0.11.0.1.tgz (asc, md5)
Scala 2.12  - kafka_2.12-0.11.0.1.tgz (asc, md5) We build for multiple

这仅在您使用Scala并且您需要为您使用的相同Scala版本构建的版本时才有意义。否则任何版本都应该有效(建议使用2.11)。