Mat*_*Sax 6 python intellij-idea apache-storm
我已经和Storm合作了一段时间,但是想要开始开发.正如所建议的那样,我使用IntelliJ(到目前为止,我使用的是Eclipse,并且只针对Java API编写拓扑).
我也在看 https://github.com/apache/storm/tree/master/examples/storm-starter#intellij-idea
此文档不完整.我首先无法在Intellij中运行任何东西.我可以理解,我需要删除storm-core依赖的范围(在storm-starter pom.xml中).(在这里找到:具有intellij想法的风暴启动器,maven项目找不到类)
之后我就能够建立这个项目.我也可以ExclamationTopology在IntelliJ中运行没有任何问题.但是,WordCountTopology失败了.
首先我得到以下错误:
java.lang.RuntimeException:backtype.storm.multilang.NoOutputException:管道到子进程似乎被破坏了!没有输出读取.序列化程序异常:回溯(最近一次调用最后一次):导入风暴中的文件"splitsentence.py",第16行ImportError:没有名为storm的模块
更新:python-storm不需要安装使其工作
我能够通过以下方式解决它:apt-get install python-storm(来自StackOverflow)
但是,我不会说Python,并且想知道问题是什么以及为什么我可以像这样解决它.只是想深入了解它.也许有人可以解释.
不幸的是,我现在收到一个不同的错误:
java.lang.RuntimeException:backtype.storm.multilang.NoOutputException:管道到子进程似乎被破坏了!没有输出读取.Serializer Exception:Traceback(最近一次调用last):文件"splitsentence.py",第18行,在SplitSentenceBolt类(storm.BasicBolt)中:AttributeError:'module'对象没有属性'BasicBolt'
我没有在互联网上找到任何解决方案.要求dev@storm.apache.org也没有帮助.我提出以下建议:
我认为总是假设拓扑总是通过storm-command行调用.因此工作目录将是$ {STORM-INSTALLATION}/bin/storm由于storm.py位于此目录中,因此splitSentence.py将能够找到风暴模块.您是否可以将工作目录设置为存在storm.py的路径,然后尝试.如果有效,我们可以稍后将其添加到文档中
但是,查找工作目录并没有解决问题.
由于我不熟悉Python,而且我是IntelliJ的新手,我现在被困住了.因为ExclamationTopology运行,我想我的基本设置是正确的.
我做错了什么?它可以在所有运行WordcountTopology在LocalCluster在的IntelliJ?
不幸的是,AFAIK无法在没有打包文件的情况下使用LocalCluster运行multilang功能.
ShellProcess依赖于TopologyContext的codeDir,由主管使用.worker被序列化为stormcode.ser,但是multilang文件应该被提取到序列化文件之外,以便python/ruby/node/etc可以加载它.
使用分发模式完成此操作很容易,因为总是有用户提交的jar,并且主管可以知道它是用户提交的内容.
但是使用本地模式完成此操作并不容易,因为主管无法知道用户提交的jar,用户可以在不打包的情况下将拓扑运行到本地模式.
因此,本地模式的Supervisor在类路径中从每个jar(以"jar"结尾)查找资源目录("resources"),并将第一次出现复制到codeDir.
storm jar 将用户拓扑jar放到classpath的第一个,因此可以毫无问题地运行它.
通常情况下,ShellProcess很自然找不到"splitsentence.py".也许你的工作目录或PYTHONPATH做了这个伎俩.
| 归档时间: |
|
| 查看次数: |
2054 次 |
| 最近记录: |