Apache Storm Python Bolt中出现“没有命名的模块”错误

dl5txlt9  于 2022-12-09  发布在  Apache
关注(0)|答案(4)|浏览(132)

当我尝试在本地运行一个带有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
1bqhqjot

1bqhqjot1#

你在使用python虚拟环境吗?在任何情况下你都需要安装matplotlib,你可以通过运行pip install matplotlib来完成

pkln4tw6

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中安装了库,则以下代码将是

public static class SplitSentence extends ShellBolt implements IRichBolt {

    public SplitSentence() {
      super("home/user/anaconda3/bin/python", "splitsentence.py");
    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
      declarer.declare(new Fields("word"));
    }

    @Override
    public Map<String, Object> getComponentConfiguration() {
      return null;
    }
  }

来源:
在storm中,如何指定python的特定版本
http://storm.apache.org/releases/2.0.0-SNAPSHOT/Multilang-protocol.html

qmelpv7a

qmelpv7a3#

嗯,我也遇到了同样的问题。我从我的管理节点上删除了anaconda,然后手动安装了所需的软件包(如matplotlib,numpy,panda等)。这当然不是最好的方法,但它很有效。

zkure5ic

zkure5ic4#

Storm使用系统默认的python而不是anaconda python。您在anaconda python中安装了matplotlib。您没有在系统python中安装matplotlib,因此当Storm使用系统python时,它将显示“没有命名的模块”错误。

相关问题