代码之家  ›  专栏  ›  技术社区  ›  TechCrap

apache storm与python混合拓扑-ModuleNotFoundError:没有名为“storm”的模块

  •  0
  • TechCrap  · 技术社区  · 7 年前

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

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

    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;
        }
    }
    

    这就是我的样本。py看起来像:

    导入风暴

    class SplitSentenceBolt(storm.BasicBolt):
        def process(self, tup):
            print("Python rocks!")
            words = tup.values[0].split(" ")
            print(tup.values[0])
    
    SplitSentenceBolt().run()
    

    然后,我将其放在一起,并尝试通过以下代码段运行:

    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();
        }
    }
    

    所有这些都正确启动,但是,我得到以下例外:

    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安装它(我找不到包)?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Stig Rohde Døssing    7 年前

    当您从IDE运行LocalCluster时,我不确定multilang支持是否适用于它。看见 https://stackoverflow.com/a/32085316/8845188 。在回答这个问题后的对话中,似乎提到了一个变通方法。

        2
  •  1
  •   TechCrap    7 年前

    只是为了未来的人们——信息非常准确。我只是错过了暴风雨。py位于我的示例所在的同一文件夹中。py已定位。只需添加以下文件: https://github.com/apache/storm/blob/v1.2.1/storm-multilang/python/src/main/resources/resources/storm.py 该文件夹解决了问题! 也可以通过LocalCluster运行此代码。