
在内部
LocalCluster或通过远程运行拓扑
StormSubmitter(这是项目中的默认设置)存在根本区别。
的范围
storm-core设置为
<scope>provided</scope>默认值,因为这些类文件仍然在群集中可用。
provided告诉Maven,这些类一定不能包含在
jar汇编文件中,从而减小了jar的大小。此外,如果文件被多次提供,则可以避免冲突-
default.yaml如果将范围更改为,则会发生冲突
compile。在这种情况下,来自的所有文件
storm-core都打包到您中
jar并提交给集群。Storm在
defaults.yaml本地和群集中的本地计算机上(即本地在工作计算机上)找到文件
jar。因此,Storm不知道使用哪个,并引发错误。
但是,
provided如果您也在本地运行,则不包括那些类文件。当然,在本地这些文件不是自动可用的,但是在启动本地JVM时必须包含在
CLASSPATH中 。由于
provided从
storm-core您排除文件得到
ClassNotFound异常。
作为每次要提交到不同环境时更改范围的一种替代方法,可以将范围设置为,
compile并在
maven-jar-plugin设置中明确包含拓扑Main /
Bolt / Spout类。此明确包含将自动从jar中排除所有其他文件,即,从中排除所有文件
storm-core。
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>MyTopology</id> <phase>package</phase> <goals> <goal>jar</goal> </goals> <configuration> <includes> <include>my/topology/package*.class</include> </includes> </configuration> </execution> </executions></plugin>
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)