2013-05-16 5 views
1

Я использую Шторм впервые (обучение от начала работы с бурей), и мой проект не во время выполнения с ClassNotFoundException:Сторм ClassNotFoundException

[WARNING] 
java.lang.ClassNotFoundException: TopologyMain 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:285) 
    at java.lang.Thread.run(Unknown Source) 

это TopologyMain и П файл:

import spouts.WordReader; 
import backtype.storm.Config; 
import backtype.storm.LocalCluster; 
import backtype.storm.topology.TopologyBuilder; 
import backtype.storm.tuple.Fields; 
import bolts.WordCounter; 
import bolts.WordNormalizer; 


public class TopologyMain { 
public static void main(String[] args) throws InterruptedException { 

    //Topology definition 
    TopologyBuilder builder = new TopologyBuilder(); 
    builder.setSpout("word-reader",new WordReader()); 
    builder.setBolt("word-normalizer", new WordNormalizer()) 
     .shuffleGrouping("word-reader"); 
    builder.setBolt("word-counter", new WordCounter(),1) 
     .fieldsGrouping("word-normalizer", new Fields("word")); 

    //Configuration 
    Config conf = new Config(); 
    conf.put("wordsFile", args[0]); 
    conf.setDebug(false); 
    //Topology run 
    conf.put(Config.TOPOLOGY_MAX_SPOUT_PENDING, 1); 
    LocalCluster cluster = new LocalCluster(); 
    cluster.submitTopology("Getting-Started-Toplogie", conf, builder.createTopology()); 
    Thread.sleep(1000); 
    cluster.shutdown(); 
} 
} 

пОМ:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>storm.book</groupId> 
    <artifactId>Getting-Started</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <compilerVersion>1.6</compilerVersion> 
    </configuration> 
    </plugin> 
</plugins> 

<!-- Repository where we can found the storm dependencies --> 
    <repository> 
     <id>clojars.org</id> 
     <url>http://clojars.org/repo</url> 
    </repository> 

<!-- Storm Dependency --> 
    <dependency> 
     <groupId>storm</groupId> 
     <artifactId>storm</artifactId> 
     <version>0.7.1</version> 
    </dependency> 

Я не очень много знаю о буре, и это для школьного проекта так, пожалуйста, помогите

+1

Не удается выполнить его там, где? Eclipse, консоль (jar)? – ssedano

+0

Пожалуйста, предоставьте точную команду, которую вы даете, чтобы отправить топологию на штурмовой кластер. – Yavar

+0

Вы запускаете локальный кластер или распределенную среду? – forhas

ответ

1

Если я не ошибаюсь, вы создаете банку, а затем пытаетесь ее отправить. Вероятно, в вашем классеpath ваш класс TopologyMain настроен неправильно или может потребоваться указать полный путь или что-то в этом роде.

7

вы должны начать:

mvn -f pom.xml clean install 

это создаст банку файлы в целевом каталоге.
После этого вы можете использовать эту команду для выполнения топологии:

mvn exec:java -Dexec.mainClass="TopologyMain" -Dexec.args="src/main/resources/words.txt" 

Удачи!

0

Попробуйте добавить следующий Maven плагин

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <archive> 
      <manifest> 
       <mainClass/> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Это создаст файл JAR со всеми зависимостями. Удостоверьтесь, что вы также указали штормовую зависимость, как предусмотрено

<dependency> 
    <groupId>org.apache.storm</groupId> 
    <artifactId>storm-core</artifactId> 
    <version>${storm.version}</version> 
    <scope>provided</scope> 
</dependency> 
0

Пока я вижу, файл, который вы показываете здесь, кажется правильным. Вы должны проверить следующие шаги, если вы не решили свою проблему.

mvn clean package -DskipTests=true 
storm jar target/your-jar-file.jar storm.book.TopologyMain arg0 

В приведенной выше коде, я полагаю, ваш $(PWD) корень вашего проекта и штормовой доступен по всему миру в вашей системе. Этот штормовой исполняемый файл не из того, что вы скомпилировали с нуля, а в официальном выпуске. И ваш должен также знать, что выполнение шторма зависит от системного Python, если ваша ОС - это Windows, вы должны проверить скрипт python для выпуска шторма для запуска вашего приложения.

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

  • Нет связанных вопросов^_^