在使用storm流数据处理框架的过程中,经常会碰到由于服务器出现问题,或者断电等的问题致使storm系统需要重启。有的时候,比如只有nimbus挂掉,但是其他的还是正常运行。则当再次重新启动nimbus时,会看到前面运行的Topology仍然在运行,只是有可能资源(supervisor)分配不均。这个时候,需要将许多的supervisor启动。但是启动的时候经常碰到这样的问题:当执行"storm supervisor"命令时,经常会过一会就会出现“Exit 20 storm supervisor”等诸如此类的问题。本文就来进行一定的解析。
遇到这个问题时,我最初的解决方法是比较土的,也是没有深究的去处理:就是将storm系统重新解压装一遍,然后重新配置一下storm.yaml。
后来考虑到需要去了解下具体的原因。现在比较有效的做法是:将storm.yaml中配置的storm.local.dir目录中的supervisor和workers两个目录删除掉。然后就可以再启动了。
具体的原因还需再考虑。
我现在的想法是:在上次系统非正常退出时,topology仍然还在运行(此时虽然无资源,但仍有这个topology在虚拟的运行)。因此,系统停止后,仍有一部分的配置文件驻留在storm.local.dir中。这部分文件是在storm系统启动时生成的。当再重新启动storm时,这部分旧配置文件的存在会阻止新的配置文件的生成。有可能在配置文件中会有很多的命名机制在启动而导致本supervisor启动不成功。比如:上次非正常退出时,遗留了一个“111111111”的配置文件。这次启动时&