2016-09-12 4 views
1

Мы пытаемся обновить Бури 0.10.0 1.0.2 и наш проект использует kafka-spoutБури втягивая несвежие зависимости

между версиями, backtype.storm имен-пакетами были изменены org.apache.storm имен-пакетами в грозовом сообществе ,

В рамках нашей реконструкции, мы должны были изменить версию также storm-kafka «s до 1.0.2

Но когда я запускаю топологию на шторм, я получаю ошибку об отсутствии классов от старой версии:

apache-storm-1.0.2/bin/storm \ 
jar \ 
$jarFile \ 
org.apache.storm.flux.Flux \ 
$yamlFile \ 
--remote 



+-   Apache Storm  -+ 
+- data FLow User eXperience -+ 
Version: 1.0.2 
Parsing file: topology-config.yaml 
333 [main] INFO o.a.s.f.p.FluxParser - loading YAML from input stream... 
335 [main] INFO o.a.s.f.p.FluxParser - Not performing property substitution. 
335 [main] INFO o.a.s.f.p.FluxParser - Not performing environment variable substitution. 
Exception in thread "main" java.lang.NoClassDefFoundError: backtype/storm/spout/MultiScheme 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at org.apache.storm.flux.FluxBuilder.buildObject(FluxBuilder.java:291) 
    at org.apache.storm.flux.FluxBuilder.buildComponents(FluxBuilder.java:350) 
    at org.apache.storm.flux.FluxBuilder.buildTopology(FluxBuilder.java:75) 
    at org.apache.storm.flux.Flux.runCli(Flux.java:153) 
    at org.apache.storm.flux.Flux.main(Flux.java:98) 
Caused by: java.lang.ClassNotFoundException: backtype.storm.spout.MultiScheme 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 7 more 

Я не уверен, откуда backtype.storm проникает в мою кодовую базу.

Я посмотрел весь код базы (и mvn dependency:tree) для 0.10.0 и backtype.storm, но эти вещи из старой-версии не место можно найти.

Я даже исключил все версии storm-kafka из своих дочерних зависимостей, а затем добавил явную зависимость от storm-kafka, но это ничего не изменило.

Maven не кажется, что по вине, потому что я не вижу никаких 0.10* версии в моем ~/.m2/repository:

ls ~/.m2/repository/org/apache/storm/* 
~/.m2/repository/org/apache/storm/flux: 
1.0.2 

~/.m2/repository/org/apache/storm/flux-core: 
1.0.2 

~/.m2/repository/org/apache/storm/storm: 
1.0.2 

~/.m2/repository/org/apache/storm/storm-kafka: 
1.0.2 

Очевидно шторм делает что-то здесь не так.

ответ

0

Проверьте свой topology-config.yaml, класс загружается динамически загружаемым после выбора имени класса из файла yaml.

+0

Я искал 'backtype.storm' во всем коде, а также явно в файле' topology-config.yaml'. В любом случае нет 'bactype.storm'. – user2250246

0

Так что проблема связана с использованием затененных файлов jar в качестве зависимостей в нашем коде. Один из затененного файла банки использовала старую версию ливневой-зависимость и как-то это не показываются в mvn dependency:tree

об исключении зависимостей штормовых из затененной баночки зависимости, выше ошибка ушла.

TL; DR: Я фактический взорвана возможный .jar файл (с помощью jar -xvf final.jar) и увидел повторяющиеся классы в backtype/storm и org/apache/storm пакетов и классов в backtype/storm становились подобрали, возможно потому, что backtype предшествует org лексикографически? (Не уверен в этом, потому что я ожидал, что имя пакета будет иметь приоритет в таких случаях).