storm集群环境部署

旧街凉风 提交于 2019-12-04 13:22:03

一、storm集群环境部署
1、集群环境下storm包部署:
(1)必须将项目依赖的本地lib目录下的jar包放入集群子节点apache-storm-2.0.0 安装目录的lib-worker 和extlib目录下,和主节点的extlib目录下。否则报
ClassNotFoundException: org.springframework.context.ApplicationContext (lib-worker目录下原来就有环境依赖的jar包,所以比extlib下的jar包多)

执行的 storm jar 包放在apache-storm-2.0.0/bin 目录下,和两个子节点的lib-worker下。

2、集群环境启动

cd /home/apache-storm-2.0.0/bin

在主备节点:
storm nimbus >/dev/null 2>&1 &
storm ui >/dev/null &


在子节点和备节点:
storm supervisor >/dev/null 2>&1 &

查看启动状态:
ps -ef | grep daemon.nimbus
使用浏览器在页面上查看拓扑的状态和集群环境运行状态http://xxx.xxx.xxx.xxx:8080/

3、拓扑的提交与停止:

拓扑提交:
storm jar stormtest-0.0.1-SNAPSHOT.jar com.stormtest.SpringbootApplication APP1 111

storm jar stormtest-0.0.1-SNAPSHOT.jar com.stormtest.SpringbootApplication APP1 111 >/home/apache-storm-2.0.0/bin/info.log &



杀掉拓扑:

cd /home/apache-storm-2.0.0/bin
storm kill 拓扑名

后台查看运行的拓扑:
storm list

4、日志查看:

在子节点/home/apache-storm-2.0.0/logs/workers-artifacts 下找到拓扑名称, 去查看里面的worker.log 日志。

 

二、springboot集成storm 集群环境部署的问题与解决方法

1、解决slf4j冲突
java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on t

log4j-slf4j-impl-2.11.2.jar
slf4j-log4j12-1.7.25.jar

目前是在集群上lib-worker目录下删除了上面两个jar,不删除在工作节点不打印worker.log 日志 。

log4j-slf4j-impl-2.11.1.jar 必须在lib-worker下存在,不存在不打印worker.log 日志 。


lib-worker下如果有虚无境的 kafkastorm的jar包 就会报(LoggerFactory is not a Logback LoggerContext but Logback is on the classpath.)


2、在集群上父pom文件加 <scope>provided</scope> 解决yaml 冲突,在本地运行时要注释掉。

 

3、将lib包 上传到lib-worker 目录下的时候,删除掉 storm开头的6个jar包。负责会报文件冲突(和2一样),要保留lib-worker目录下 自带的两个storm的jar包。

4、 读取不到依赖工程的 配置文件?
必须把要执行的jar包的properties 配置文件放在config目录下。


5、不在log4j2.xml指定目录打印日志
必须在属性文件中指定日志文件所在位置,在bin目录提交任务的时候 不能指定日志输出目录。

6、libworker 下不能有能运行的提交的jar包其他名称的版本,会报类的序列号不一致。

 


7、本地启动的时候不能设置为2个 worker,否则跑一会 没有任何报错进程就断掉了。


8、同时拉起两个worker,
将两个bolt 分发到5.2X4上,5.2X4上要启动springApplication就会打印 consumer.log日志,就报了
javax.management.InstanceAlreadyExistsException: com.alibaba.druid.filter.stat:name=statFilter,type=StatFilter

将两个spout分发到了 4.2X3上,不需要启动springApplication,因此没有打印consumer.log日志。

停了子节点,上面的worker进程依然存在,worker.log一直打印日志,停了worker进程,会立刻在同一节点拉起来。启动的时候没启动成功的时候会重复多次去拉prepare方法。

同一个worker内,spring只被初始化一次。

 

三、集群环境下各个节点的分工

nimbus 将客户端提交的topology代码保存到本地目录/nimbus/stormdist/下

nimbus 分配的任务存放在zk节点/storm/assignments下:

进入zk客户端:
cd /opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/zookeeper/bin
./zkCli.sh
get /storm/assignments
ls /storm/assignments

ls /storm/assignments/wn0827-1-1566868207
quit


子节点从nimbus中获取到的内容放在:
/home/nari/apache-storm-2.0.0/storm-local/supervisor/stormdist/test1-6-1565944602

stormjar.jar

 

 


 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!