天天看点

Storm之——常见问题及解决办法

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/78336187

在做Storm编程时,通常会遇到一些问题,那么,这里就给大家介绍几种常见的问题和对应的解决办法,供大家在日常学习和工作中参考。

1. 发布topologies到远程集群时,出现Nimbus host is not set异常

原因是Nimbus没有被正确启动起来,可能是storm.yaml文件没有配置,或者配置有问题。

解决方法:打开storm.yaml文件正确配置:nimbus.host: "xxx.xxx.xxx.xxx",重启nimbus后台程序即可。

2. 发布topologies到远程集群时,出现AlreadyAliveException(msg: xxx is already active)异常

原因是提供的topology与已经在运行的topology重名。

解决方法:发布时换一个拓扑名称即可。

3. 启动Supervisor时,出现java.lang.UnsatisfiedLinkError: /usr/local/lib/libjzmq.so.0.0.0: libzmq.so.1: cannot open shared object file: No such file or directory异常

原因是未找到zmq动态链接库。

解决方法1:export LD_LIBRARY_PATH=/usr/local/lib

解决方法2:编辑/etc/ld.so.conf文件,增加一行:/usr/local/lib。再执行sudo ldconfig命令,重启Supervisor。

4. 发布drpc类型的topologies到远程集群时,出现空指针异常,连接drpc服务器失败

原因是未正确配置drpc服务器地址。

解决方法:在conf/storm.yaml文件中增加drpc服务器配置,启动配置文件中指定的所有drpc服务。内容如下:

5. 客户端调用drpc服务时,worker的日志中出现Failing message,而bolt都未收到数据

错误日志如下所示:

解决方法:主机名,域名,hosts文件配置不正确会引起这类错误。检查并修改storm相关机器的主机名,域名,hosts文件。重启网络服务:service network restart。重启storm,再次调用drpc服务,成功。Hosts文件中必须包含如下内容:

6. 发布topologies时,出现不能序列化log4j.Logger的异常

原因是日志系统无法正确支付序列化。

解决方法:使用slf4j代替log4j。

7. bolt在处理消息时,worker的日志中出现Failing message

原因可能是因为Topology的消息处理超时所致。

解决方法:提交Topology时设置适当的消息超时时间,比默认消息超时时间(30秒)更长。

conf.setMessageTimeoutSecs(60);

8. storm启动时报no jzmq in java.library.path错误

原因是找不到jzmq,默认情况下在执行install_zmq.sh时,那些.so文件安装路径在/usr/local/lib,但是实际安装时可能装在其他的路径下了。

解决方法:在storm.yaml中添加:

9. 安装jzmq时遇到No rule to make target `classdist_noinst.stamp'的make错误

具体的make错误信息:

解决方法:手动创建classdist_noinst.stamp空文件。

10. 安装jzmq时遇到cannot access org.zeromq.ZMQ的make错误

解决方法:手动编译,然后重新make即可通过。

继续阅读