Apache storm Storm ClassNotFoundException

Apache storm Storm ClassNotFoundException,apache-storm,Apache Storm,我第一次使用Storm(从Storm入门中学习),我的项目在运行时失败,出现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.Acce

我第一次使用Storm(从Storm入门中学习),我的项目在运行时失败,出现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和pom文件:

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();
}
}
pom:


4.0.0
storm.book
开始
0.0.1-快照
org.apache.maven.plugins
maven编译器插件
2.3.2
1.6
1.6
1.6


clojars.org
http://clojars.org/repo


暴风雨
暴风雨
0.7.1


我真的不太了解storm,这是学校的项目,所以如果我没有错,请帮助我,你正在创建jar,然后尝试提交它。可能在您的类路径中,
TopologyMain
类未正确设置,或者您需要指定完全限定路径或类似的内容。

您应该启动:

mvn -f pom.xml clean install
这将在目标目录中创建jar文件。
之后,您可以使用此命令执行拓扑:

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

祝你好运

尝试添加以下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>

maven汇编插件
带有依赖项的jar
组装
包裹
单一的
这将创建一个包含所有依赖项的JAR。确保还指定了所提供的storm依赖项

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

org.apache.storm
风暴核心
${storm.version}
假如

据我所知,您在这里显示的文件似乎是正确的。如果尚未解决问题,则应检查以下步骤

mvn clean package -DskipTests=true
storm jar target/your-jar-file.jar storm.book.TopologyMain arg0
在上面的代码中,我假设您的
$(PWD)
是项目的根目录,并且storm在您的系统中是全局可用的。这个storm可执行文件不是您从头编译的,而是官方版本。
您还应该知道storm可执行文件依赖于系统的Python,如果您的操作系统是Windows,那么您应该检查storm release Python脚本以运行您的应用程序

我在第一次跑步时也遇到过同样的问题。问题是我必须以完整的包名运行TopologyMain类,如下所示:

storm jar <jar-name> <topologymain class with full package name>
风暴罐


如果您发现依赖类有任何classNotFound异常,请尝试构建fat jar。

如果在何处执行,则会失败?Eclipse,console(jar)?请提供将拓扑提交给storm cluster的确切命令。您是在本地群集上运行还是在分布式环境下运行?
<dependency>
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-core</artifactId>
    <version>${storm.version}</version>
    <scope>provided</scope>
</dependency> 
mvn clean package -DskipTests=true
storm jar target/your-jar-file.jar storm.book.TopologyMain arg0
storm jar <jar-name> <topologymain class with full package name>