Apache Storm Python B中的“No module named”错误

2024-06-06 19:30:22 发布

您现在位置:Python中文网/ 问答频道 /正文

当我尝试使用python实现的单个bolt在本地运行Storm拓扑时,收到以下错误消息。我正在做类似于storm starter kit中WordCountTopology示例中的所有操作,但它无法加载我的PythonBolt中所需的matplotlib之类的模块。任何帮助或指导将不胜感激。在

如果有帮助的话,我正在Windows机器上使用Python。在

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

Tags: iocoresourcematplotlibsnapshotjavaatunknown
3条回答

我也遇到了同样的问题。我把anaconda从我的supervisor节点中移除,并手动安装所需的包(即matplotlib、numpy、pandas等)。这当然不是做事情的最佳方式,但它很管用。在

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

2018年,我因为同样的问题被困了好几个小时, 你需要确保两件事 1) 您需要在机器上的任何python设置中安装matplot lib。 所以这个设置可以在default/usr/bin/python中完成,或者如果您安装了anaconda,那么可以在/home/user/anaconda3/bin/python中进行,或者如果您有virtualenv设置,那么可以在那里安装它。 2) 在用java代码编写shell-bolt实现时,请确保提供安装matplotlib的python安装路径。 为如下图所示如果您在anaconda中的/home/user/anaconda3/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;
    }
  }

学分和来源:

In storm, how to specify specific version of python

http://storm.apache.org/releases/2.0.0-SNAPSHOT/Multilang-protocol.html

相关问题 更多 >