我是第一次使用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)
这些是拓扑主文件和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();
}
}
聚甲醛:
<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>
我真的不太了解风暴,这是学校的项目,所以请帮助
5条答案
按热度按时间gcuhipw91#
据我所知,你在这里展示的文件似乎是对的。如果你还没有解决你的问题,你应该检查以下步骤。
在上面的代码中,我假设
$(PWD)
是项目的根目录,storm在系统中是全局可用的。这个storm可执行文件不是从您从头开始编译的,而是官方版本。您还应该知道storm可执行文件依赖于系统的python,如果您的操作系统是windows,那么您应该检查storm release python脚本来运行您的应用程序。chy5wohz2#
如果我没有错的话,你是在创建jar然后试图提交它。可能在你的课堂上
TopologyMain
类未正确设置,或者可能需要指定完全限定路径或类似的内容。g9icjywg3#
当我第一次遇到风暴的时候,我也遇到了同样的问题。问题是我必须用完整的包名运行topologymain类,如下所示:
如果您发现依赖类有任何classnotfound异常,那么尝试构建fatjar。
5tmbdcev4#
尝试添加以下maven插件
这将创建一个包含所有依赖项的jar。确保还指定了所提供的storm依赖项
stszievb5#
你应该发起:
这将在目标目录中创建jar文件。
之后,您可以使用以下命令执行拓扑:
祝你好运!