Storm实战常见问题及解决方案(3)

Exception in thread "main"java.lang.IllegalArgumentException: Nimbus host is notset
      atbacktype.storm.utils.NimbusClient.<init>(NimbusClient.java:30)
      atbacktype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:17)
      atbacktype.storm.StormSubmitter.submitJar(StormSubmitter.java:78)
      atbacktype.storm.StormSubmitter.submitJar(StormSubmitter.java:71)
      atbacktype.storm.StormSubmitter.submitTopology(StormSubmitter.java:50)
      atcom.taobao.kaleidoscope.storm.IcdbTopology.main(IcdbTopology.java:59)

但是启动nimbus是没有问题的, 这个主要因为conf_dir路径设置不正确,在bin/storm脚本中需要加上这样一句:

Python代码 


1. CONF_DIR = STORM_DIR + "/conf" 

3关于DRPC

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

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

解决方法:在conf/storm.yaml 文件中增加drpc 服务器配置,启动配置文件中

指定的所有drpc 服务。内容如下:

drpc.servers:

- "drpc 服务器ip"

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

错误日志如下所示:

2011-12-02 09:59:16 task [INFO] Failing message

backtype.storm.drpc.DRPCSpout$DRPCMessageId@3770bdf7: source:1:27,

stream: 1, id: {-5919451531315711689=-5919451531315711689},

[foo.com/blog/1, {"port":3772,"id":"5","host":"10.0.0.24"}]

原因是主机名,域名,hosts 文件配置不正确会引起这类错误。

解决方法:检查并修改storm 相关机器的主机名,域名,hosts 文件。重启网络服务:service networkrestart。重启storm,再次调用drpc 服务,成功。Hosts 文件中必须包含如下

内容:

[nimbus 主机ip] [nimbus 主机名] [nimbus 主机别名]

[supervisor 主机ip] [supervisor 主机名] [supervisor 主机别名]

[zookeeper 主机ip] [zookeeper 主机名] [zookeeper 主机别名]

4关于jzmq安装

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

原因是找不到jzmq,默认情况下在执行install_zmq.sh 时,那些.so 文件

安装路径在/usr/local/lib,但是实际安装时可能装在其他的路径下了。

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

java.library.path:

"/opt/storm/jzmq/lib:/opt/storm/zeromq/lib:/usr/local/lib:/opt/local/

lib:/usr/lib"

4.2安装jzmq 时遇到No rule to make target ‘classdist_noinst.stamp’的make错误

具体的make 错误信息:

make[1]: *** No rule to make target`classdist_noinst.stamp',needed by `org/zeromq/ZMQ.class'.Stop.

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

touch src/classdist_noinst.stamp

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

具体的make 错误信息:

error: cannot access org.zeromq.ZMQ class file fororg.zeromq.ZMQ not found

javadoc: error - Class org.zeromq.ZMQ not found.

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

cd src

javac -d . org/zeromq/*.java

cd ..

4.4 在部署storm节点的时候需要安装jzmq和zeromq, 在安装这两个依赖包之后,需要执行sudo -u root ldconfig. 否则会出现异常:

2012-02-24 16:30:30 worker [ERROR] Error oninitialization of server mk-worker
java.lang.UnsatisfiedLinkError: /usr/local/lib/libjzmq.so.0.0.0:libzmq.so.1: cannot open shared object file: No such fileor
directory
      at java.lang.ClassLoader$NativeLibrary.load(NativeMethod)
      atjava.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
      atjava.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
      atjava.lang.Runtime.loadLibrary0(Runtime.java:823)
      atjava.lang.System.loadLibrary(System.java:1028)
      atorg.zeromq.ZMQ.<clinit>(ZMQ.java:34)

5关于Storm的配置问题

1.      yaml跟我们一般用的属性配置文件有所不同, 它的要求更严格一些,因此在往conf/storm.yaml中添加配置的时候必须注意,比如必须注意开始位置和冒号后面的空格, 否则配置不会生效。

2.      如何检查配置是否生效?

可以使用命令: storm localconfvalue 配置关键字

但是这个命令只能在nimbus上生效, 在supervisor看到的还是默认值.不知道为什么 。

6关闭storm相关进程

6.1关闭nimbus相关进程:

kill `ps aux | egrep '(daemon\.nimbus)|(storm\.ui\.core)' |fgrep -v egrep | awk '{print $2}'`

备注:这是在网上看到的,没有经过实际测试,有兴趣的朋友可以自己测试一下。

6.2干掉supervisor上的所有storm进程:

kill `ps aux | fgrep storm | fgrep -v 'fgrep' | awk '{print$2}'`

备注:这是在网上看到的,没有经过实际测试,有兴趣的朋友可以自己测试一下。

7关于Topology发布之后的log

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/249d63dcf6c0ffbf2b65e7f09da2cf1d.html