当我尝试在本地运行一个带有python中实现的单个bolt的Storm拓扑时,我收到了以下错误消息。我正在像storm-starter kit中的WordCountTopology示例那样做所有事情,但它无法加载我的python bolt中所需的模块(如matplotlib)。如有任何帮助或指导,将不胜感激。
我在Windows机器上使用Anaconda,如果有帮助的话。
12970 [Thread-21-divide] ERROR backtype.storm.daemon.executor -
java.lang.RuntimeException: Error when launching multilang subprocess
Traceback (most recent call last):
File "pythonBolt.py", line 4, in <module>
from matplotlib import mlab
ImportError: No module named matplotlib
at backtype.storm.utils.ShellProcess.launch(ShellProcess.java:66) ~[storm-core-0.11.0-SNAPSHOT.jar:0.11.0-SNAPSHOT]
at backtype.storm.task.ShellBolt.prepare(ShellBolt.java:117) ~[storm-core-0.11.0-SNAPSHOT.jar:0.11.0-SNAPSHOT]
at backtype.storm.daemon.executor$fn__8077$fn__8090.invoke(executor.clj:746) ~[storm-core-0.11.0-SNAPSHOT.jar:0.11.0-SNAPSHOT]
at backtype.storm.util$async_loop$fn__543.invoke(util.clj:473) ~[storm-core-0.11.0-SNAPSHOT.jar:0.11.0-SNAPSHOT]
at clojure.lang.AFn.run(AFn.java:22) [clojure-1.6.0.jar:na]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_31]
Caused by: java.io.IOException: Die Pipe wurde beendet
at java.io.FileOutputStream.writeBytes(Native Method) ~[na:1.8.0_31]
at java.io.FileOutputStream.write(Unknown Source) ~[na:1.8.0_31]
at java.io.BufferedOutputStream.flushBuffer(Unknown Source) ~[na:1.8.0_31]
at java.io.BufferedOutputStream.flush(Unknown Source) ~[na:1.8.0_31]
at java.io.DataOutputStream.flush(Unknown Source) ~[na:1.8.0_31]
at backtype.storm.multilang.JsonSerializer.writeString(JsonSerializer.java:96) ~[storm-core-0.11.0-SNAPSHOT.jar:0.11.0-SNAPSHOT]
at backtype.storm.multilang.JsonSerializer.writeMessage(JsonSerializer.java:89) ~[storm-core-0.11.0-SNAPSHOT.jar:0.11.0-SNAPSHOT]
at backtype.storm.multilang.JsonSerializer.connect(JsonSerializer.java:61) ~[storm-core-0.11.0-SNAPSHOT.jar:0.11.0-SNAPSHOT]
at backtype.storm.utils.ShellProcess.launch(ShellProcess.java:64) ~[storm-core-0.11.0-SNAPSHOT.jar:0.11.0-SNAPSHOT]
... 5 common frames omitted
4条答案
按热度按时间1bqhqjot1#
你在使用python虚拟环境吗?在任何情况下你都需要安装matplotlib,你可以通过运行
pip install matplotlib
来完成pkln4tw62#
现在是2018年,我被同一个问题困了几个小时,你需要确保两件事1)你需要在你的机器上的任何python安装程序中安装matplot库。所以这个安装程序可以在默认的/usr/bin/python中完成,或者如果你有anaconda安装程序,你可以在/home/user/anaconda 3/bin/python中完成,或者如果你有virtualenv安装程序,那么你可以在那里安装它。2)当用java代码编写shell bolt实现时,确保提供python安装路径,在该路径中您安装了matplotlib。例如,如果您在anaconda的/home/user/anaconda 3/bin/python中安装了库,则以下代码将是
来源:
在storm中,如何指定python的特定版本
http://storm.apache.org/releases/2.0.0-SNAPSHOT/Multilang-protocol.html
qmelpv7a3#
嗯,我也遇到了同样的问题。我从我的管理节点上删除了anaconda,然后手动安装了所需的软件包(如matplotlib,numpy,panda等)。这当然不是最好的方法,但它很有效。
zkure5ic4#
Storm使用系统默认的python而不是anaconda python。您在anaconda python中安装了matplotlib。您没有在系统python中安装matplotlib,因此当Storm使用系统python时,它将显示“没有命名的模块”错误。