Storm提交topology小记

Storm提交topology小记

//20220314
写在前面:今天学习storm的时候,把写完的storm代码打包成jar上传到storm集群中运行,出现了一系列问题,在此记录一下

出现的问题:

  1. 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.错误
  2. Caused by: java.lang.ClassNotFoundException: org.apache.storm.topology.IRichSpout错误
  3. Must submit topologies using the 'storm' client script so that StormSubmitter knows which jar to upload.错误
  4. 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]错误

解决方法:

  1. 问题在于引用的jar包中有两个关于log4j的包,删除其中一个即可,idea中在项目libary中删除即可,删除之后记得重启项目
  2. 问题在于storm-core库依赖引用时<scope>provided</scope>标签未删除或注释,但是这里是错误操作,因该是使用了java -jar命令才会报的错,正经storm集群提交时是需要这个标签的,使用java执行不能正确运行,如果非要使用java命令运行,就把这个去掉就行,不过会报出上述问题3所示的错误
  3. 问题在于使用java命令执行jar包,但是提交到storm集群的任务是需要使用storm中的jar命令执行的,所以报此错误时使用storm jar [jar包名] [主类名]即可
  4. 问题来自于未使用<scope>provided</scope>标签,提交到集群时,需要使用此标签

  • 提交集群之后,如果程序有错误,不会报出,需要查看日志文件,比如我设置的目的目录没有创建,那集群不会显式报错,智慧记录到日志中,所以,如果集群没有预期效果,记得检查日志文件
  • 另,提交到集群成功截图如下:
  • 关闭集群任务有两种方式
    1. 使用命令storm kill [任务名]
    2. 从ui界面中直接选中相应任务,点击kill键即可杀死任务
  • 任务需要提交到执行了nimbus进程的机器上

以上,
希望对后来者有所帮助
/抱拳

posted @ 2022-03-14 14:36  醉生梦死_0423  阅读(109)  评论(0编辑  收藏  举报