2015-05-21 3 views
2

Я пытаюсь интегрировать Storm с Kafka. Я использую топологию Storm, используя KafkaSpout. Это основная топология подсчета слов. Я использую Apache Kafka как источник и шторм для обработки данных. Представляя топологию, я сталкиваюсь с этими проблемами. Я очень новичок в Кафке и Шторме. Пожалуйста, предложите мне изменения, которые мне нужно сделать в следующем коде.Исключение в теме "main" java.lang.NoClassDefFoundError: backtype/storm/spout/MultiScheme

Это мой код:

public class TopologyMain { 

private static final String SENTENCE_SPOUT_ID = "kafka-sentence-spout"; 
    private static final String WORD_NORMALIZER = "word-normalizer"; 
    private static final String WORD_COUNTER = "word-counter"; 
    private static final String TOPOLOGY_NAME = "kafka-word-count-topology"; 


    public static void main(String[] args) throws InterruptedException, AlreadyAliveException, InvalidTopologyException { 

     int numSpoutExecutors = 1; 

     KafkaSpout kspout = buildKafkaSentenceSpout(); 
     WordNormalizer normalizeBolt = new WordNormalizer(); 
     WordCounter countBolt = new WordCounter(); 



    //Topology definition 
    TopologyBuilder builder = new TopologyBuilder(); 

    builder.setSpout(SENTENCE_SPOUT_ID, kspout, numSpoutExecutors); 
    builder.setBolt(WORD_NORMALIZER, new WordNormalizer()).shuffleGrouping(SENTENCE_SPOUT_ID); 
    builder.setBolt(WORD_COUNTER, new WordCounter(),1).fieldsGrouping(WORD_NORMALIZER, new Fields("word")); 

    //Configuration 
    Config conf = new Config(); 
    //System.setProperty("storm.jar", "/home/raremile/.m2/repository/org/apache/storm/storm-core/0.9.3/storm-core-0.9.3.jar"); 
    StormSubmitter.submitTopology(TOPOLOGY_NAME, conf, builder.createTopology()); 
    conf.setDebug(false); 

} 

    private static KafkaSpout buildKafkaSentenceSpout() { 
     String zkHostPort = "localhost:2181"; 
     String topic = "sentences"; 

     String zkRoot = "/acking-kafka-sentence-spout"; 
     String zkSpoutId = "acking-sentence-spout"; 
     ZkHosts zkHosts = new ZkHosts(zkHostPort); 

     SpoutConfig spoutCfg = new SpoutConfig(zkHosts, topic, zkRoot, zkSpoutId); 
     KafkaSpout kafkaSpout = new KafkaSpout(spoutCfg); 
     return kafkaSpout; 
     } 
} 

И это ошибка я получаю:

Exception in thread "main" java.lang.NoClassDefFoundError: backtype/storm/spout/MultiScheme 
at TopologyMain.buildKafkaSentenceSpout(TopologyMain.java:57) 
at TopologyMain.main(TopologyMain.java:28) 
Caused by: java.lang.ClassNotFoundException: backtype.storm.spout.MultiScheme 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 2 more 
+0

Исключение из потока "main" java.lang.NoSuchMethodError: backtype.storm.topology.TopologyBuilder.setBolt (Ljava/lang/String; Lbacktype/storm/topology/IBasicBolt; Ljava/lang/Integer;) Lbacktype/storm/топология/BoltDeclarer; –

+0

Я могу решить упомянутую проблему, но теперь я столкнулся с этой проблемой. Любые предложения ребята !! –

+0

Если вы решили одну проблему и теперь имеете новую, я бы рекомендовал вам создать новый связанный с ней вопрос. – nelsonda

ответ

2

Похоже, вы пропустите storm-core банку в вашем пути к классам. Загрузите и добавьте его.

+0

Спасибо, что решил проблему. Но теперь у меня другая ошибка. SLF4J: путь класса содержит несколько привязок SLF4J. SLF4J: Найдено привязка в [jar: файл: /home/raremile/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar!/Org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Найдено привязку в [jar: файл: /home/raremile/.m2/repository/ch/qos/logback/logback-classic/1.0.6/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: см. http://www.slf4j.org/codes.html#multiple_bindings для объяснения. –

+0

SLF4J: Фактическое связывание имеет тип [org.slf4j.impl.Log4jLoggerFactory] SLF4J: Запрошенная версия 1.5.8 с помощью привязки slf4j не совместима с [1.6, 1.7] SLF4J: см. Http: //www.slf4j. org/codes.html # version_mismatch для получения дополнительной информации. Исключения в нити "основные" java.lang.RuntimeException: Найдено несколько defaults.yaml ресурсов \t на backtype.storm.utils.Utils.findAndReadConfigFile (Utils.java:106) \t в backtype.storm.utils.Utils.readDefaultConfig (Utils.java:126) \t в backtype.storm.utils.Utils.readStormConfig (Utils.java:146) \t на backtype.storm.StormSubmitter –

+0

@kumarriteshranjansinha Похоже, вы пропустили SLF4J или log4j или один О.Б. мосты в вашем пути к классу. – Jens

Смежные вопросы