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库依赖引用时
<scope>provided</scope>
标签未删除或注释,但是这里是错误操作,因该是使用了java -jar
命令才会报的错,正经storm集群提交时是需要这个标签的,使用java执行不能正确运行,如果非要使用java命令运行,就把这个去掉就行,不过会报出上述问题3所示的错误 - 问题在于使用java命令执行jar包,但是提交到storm集群的任务是需要使用storm中的jar命令执行的,所以报此错误时使用
storm jar [jar包名] [主类名]
即可 - 问题来自于未使用
<scope>provided</scope>
标签,提交到集群时,需要使用此标签
补
- 提交集群之后,如果程序有错误,不会报出,需要查看日志文件,比如我设置的目的目录没有创建,那集群不会显式报错,智慧记录到日志中,所以,如果集群没有预期效果,记得检查日志文件
- 另,提交到集群成功截图如下:
- 关闭集群任务有两种方式
- 使用命令
storm kill [任务名]
- 从ui界面中直接选中相应任务,点击kill键即可杀死任务
- 使用命令
- 任务需要提交到执行了nimbus进程的机器上
以上,
希望对后来者有所帮助
/抱拳
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2020-03-14 牛客网_剑指offer题集——平衡二叉树(java实现)
2019-03-14 算法基础_递归_给定一个数字n,打印出所有的划分等式
2019-03-14 算法基础_递归_给定m个A,n个B,一共有多少种排列
2019-03-14 算法基础_递归_求杨辉三角第m行第n个数字