首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有python -ModuleNotFoundError的apache-storm混合拓扑:没有名为'storm‘的模块

带有python -ModuleNotFoundError的apache-storm混合拓扑:没有名为'storm‘的模块
EN

Stack Overflow用户
提问于 2018-03-05 01:42:01
回答 2查看 454关注 0票数 0

我正在尝试创建一个混合的storm拓扑,它使用基于Java的spout和基于python的bolt。

对于基于python的螺栓,我编写了一个Java包装器:

代码语言:javascript
复制
class PythonBolt extends ShellBolt implements IRichBolt {

    public PythonBolt() {
        super("python", "C:\\somepath\\sample.py");
    }
    @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
    }

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

这是我的sample.py的样子:

导入风暴

代码语言:javascript
复制
class SplitSentenceBolt(storm.BasicBolt):
    def process(self, tup):
        print("Python rocks!")
        words = tup.values[0].split(" ")
        print(tup.values[0])

SplitSentenceBolt().run()

然后,我将所有这些放在一起,并尝试通过以下代码片段运行:

代码语言:javascript
复制
public class SampleBolt {

    public static void main(String[] args) throws Exception {
        TopologyBuilder builder = new TopologyBuilder();
        builder.setSpout("Hello", new RawDataLevelSpout(), 12);
        builder.setBolt("World", new PythonBolt(), 12);

        Config config = new Config();
        config.setDebug(true);


        LocalCluster cluster = new LocalCluster();
        cluster.submitTopology("Hello-World-BaiJian", config, builder.createTopology());
        Utils.sleep(100000);
        cluster.killTopology("Hello-World-BaiJian");
        cluster.shutdown();
    }
}

这一切都正确启动,但是,我得到了以下异常:

代码语言:javascript
复制
import storm
ModuleNotFoundError: No module named 'storm'

    at org.apache.storm.utils.ShellProcess.launch(ShellProcess.java:94) ~[storm-client-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT]
    at org.apache.storm.task.ShellBolt.prepare(ShellBolt.java:154) ~[storm-client-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT]
    at org.apache.storm.executor.bolt.BoltExecutor.init(BoltExecutor.java:84) ~[storm-client-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT]
    at org.apache.storm.executor.bolt.BoltExecutor.call(BoltExecutor.java:93) ~[storm-client-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT]
    at org.apache.storm.executor.bolt.BoltExecutor.call(BoltExecutor.java:45) ~[storm-client-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT]
    at org.apache.storm.utils.Utils$2.run(Utils.java:329) ~[storm-client-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT]

有什么关于如何克服这个问题的提示吗?如何安装python storm包?可以通过Anaconda安装吗(我找不到包)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-07 17:18:43

仅供未来的人们使用--信息非常精确。我只是错过了我的sample.py所在的同一文件夹中的storm.py。只需将以下文件:https://github.com/apache/storm/blob/v1.2.1/storm-multilang/python/src/main/resources/resources/storm.py添加到该文件夹中即可解决问题!也可以通过LocalCluster运行此代码。

票数 1
EN

Stack Overflow用户

发布于 2018-03-07 04:00:14

当你从集成开发环境中运行LocalCluster时,我不确定多语言支持是否适用于它。参见https://stackoverflow.com/a/32085316/8845188。在这个答案之后的对话中似乎提到了一个解决办法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49098352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档