Storm提交topology小记
Storm提交topology小记
//20220314
写在前面:今天学习storm的时候,把写完的storm代码打包成jar上传到storm集群中运行,出现了一系列问题,在此记录一下
出现的问题:
- 报
Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.
错误 - 报
Caused by: java.lang.ClassNotFoundException: org.apache.storm.topology.IRichSpout
错误 - 报
Must submit topologies using the 'storm' client script so that StormSubmitter knows which jar to upload.
错误 - 报
Caused by: java.io.IOException: Found multiple defaults.yaml resources. You're probably bundling the Storm jars with your topology jar. [jar:file:/home/hadoop/software/storm/apache-storm-2.3.0/lib-worker/storm-client-2.3.0.jar!/defaults.yaml, jar:file:/home/hadoop/Hadoop.jar!/defaults.yaml]
错误
解决方法:
- 问题在于引用的jar包中有两个关于log4j的包,删除其中一个即可,idea中在项目libary中删除即可,删除之后记得重启项目
- 问题在于storm-core库依赖引用时
标签未删除或注释,但是这里是错误操作,因该是使用了provided java -jar
命令才会报的错,正经storm集群提交时是需要这个标签的,使用java执行不能正确运行,如果非要使用java命令运行,就把这个去掉就行,不过会报出上述问题3所示的错误 - 问题在于使用java命令执行jar包,但是提交到storm集群的任务是需要使用storm中的jar命令执行的,所以报此错误时使用
storm jar [jar包名] [主类名]
即可 - 问题来自于未使用
标签,提交到集群时,需要使用此标签provided
补
- 提交集群之后,如果程序有错误,不会报出,需要查看日志文件,比如我设置的目的目录没有创建,那集群不会显式报错,智慧记录到日志中,所以,如果集群没有预期效果,记得检查日志文件
- 另,提交到集群成功截图如下:
- 关闭集群任务有两种方式
- 使用命令
storm kill [任务名]
- 从ui界面中直接选中相应任务,点击kill键即可杀死任务
- 使用命令
- 任务需要提交到执行了nimbus进程的机器上
以上,
希望对后来者有所帮助
/抱拳