Java 在运行多语言拓扑时,如何配置Apache Storm以查找Python?
我正在尝试从风暴中运行示例Java 在运行多语言拓扑时,如何配置Apache Storm以查找Python?,java,python,apache-storm,Java,Python,Apache Storm,我正在尝试从风暴中运行示例WordCount拓扑 我创建了一个新的Storm项目,并通过Maven将Storm作为依赖项添加。我能够成功地运行惊呼本体论,因此Storm总体上起作用。我已安装python: zachary:~ zachary$ python --version Python 2.7.6 zachary:~ zachary$ which python /usr/bin/python 我已将Python脚本添加到新项目中的multilang/resources目录中。我已尝试
WordCount
拓扑
我创建了一个新的Storm项目,并通过Maven将Storm作为依赖项添加。我能够成功地运行惊呼本体论
,因此Storm总体上起作用。我已安装python:
zachary:~ zachary$ python --version
Python 2.7.6
zachary:~ zachary$ which python
/usr/bin/python
我已将Python脚本添加到新项目中的multilang/resources
目录中。我已尝试将多语言
和资源
以及其中一个/或作为源路径添加到我的项目中,但我始终会遇到以下错误:
6239 [Thread-20-split] ERROR b.s.d.executor -
java.lang.RuntimeException: Error when launching multilang subprocess
at backtype.storm.utils.ShellProcess.launch(ShellProcess.java:68) ~[storm-core-0.10.0.jar:0.10.0]
at backtype.storm.task.ShellBolt.prepare(ShellBolt.java:117) ~[storm-core-0.10.0.jar:0.10.0]
at backtype.storm.daemon.executor$fn__5694$fn__5707.invoke(executor.clj:757) ~[storm-core-0.10.0.jar:0.10.0]
at backtype.storm.util$async_loop$fn__545.invoke(util.clj:477) [storm-core-0.10.0.jar:0.10.0]
at clojure.lang.AFn.run(AFn.java:22) [clojure-1.6.0.jar:?]
at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
Caused by: java.io.IOException: Cannot run program "python" (in directory "/var/folders/rr/tb1q5lv93sldld20pln730kr0000gn/T/ad72dd44-af9b-4849-8400-b1a2596e6f37/supervisor/stormdist/word-count-1-1456069567/resources"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) ~[?:1.8.0_45]
at backtype.storm.utils.ShellProcess.launch(ShellProcess.java:61) ~[storm-core-0.10.0.jar:0.10.0]
... 5 more
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method) ~[?:1.8.0_45]
at java.lang.UNIXProcess.<init>(UNIXProcess.java:248) ~[?:1.8.0_45]
at java.lang.ProcessImpl.start(ProcessImpl.java:134) ~[?:1.8.0_45]
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ~[?:1.8.0_45]
at backtype.storm.utils.ShellProcess.launch(ShellProcess.java:61) ~[storm-core-0.10.0.jar:0.10.0]
... 5 more
6239[Thread-20-split]错误b.s.d.执行器-
java.lang.RuntimeException:启动多语言子进程时出错
在backtype.storm.utils.ShellProcess.launch(ShellProcess.java:68)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.task.ShellBolt.prepare(ShellBolt.java:117)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.daemon.executor$fn_u5694$fn_u5707.invoke(executor.clj:757)~[storm-core-0.10.0.jar:0.10.0]
在backtype.storm.util$async\u循环$fn\uu 545.invoke(util.clj:477)[storm-core-0.10.0.jar:0.10.0]
在clojure.lang.AFn.run(AFn.java:22)[clojure-1.6.0.jar:?]
在java.lang.Thread.run(Thread.java:745)[?:1.8.0_45]
原因:java.io.IOException:无法运行程序“python”(在目录/var/folders/rr/tb1q5lv93sldld20pln730kr0000gn/T/ad72dd44-af9b-4849-8400-b1a2596e6f37/supervisor/stormdist/word-count-1-1456069567/resources中):错误=2,没有这样的文件或目录
在java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)~[?:1.8.0_45]
在backtype.storm.utils.ShellProcess.launch(ShellProcess.java:61)~[storm-core-0.10.0.jar:0.10.0]
... 还有5个
原因:java.io.IOException:error=2,没有这样的文件或目录
在java.lang.UNIXProcess.forkAndExec(本机方法)~[?:1.8.0_45]
在java.lang.UNIXProcess(UNIXProcess.java:248)~[?:1.8.0_45]
在java.lang.ProcessImpl.start(ProcessImpl.java:134)~[?:1.8.0_45]
在java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)~[?:1.8.0_45]
在backtype.storm.utils.ShellProcess.launch(ShellProcess.java:61)~[storm-core-0.10.0.jar:0.10.0]
... 还有5个
我已经搜索过了,这似乎是一个常见的错误,与在项目中添加multilang/resources
作为源路径有关,但我已经这样做了
有什么想法吗?也许这有帮助:谢谢你的链接。我目前正在尝试设置
env
,就像您在该线程中所做的那样。你能解释一下为什么我得到的方法setEnv(Map)对于WordCountTopology.splitSession类型是未定义的吗?我的splitsense
扩展了ShellBolt
,我在Github中看到了setEnv
,但在这些中没有看到。我对风暴代码设置的误解?不知道为什么setEnv(Map)
是“未定义的”。。。它应该在那里。是的,那是我现在关注的地方,非常奇怪。我相信是在7月份推出的setEnv
公共关系0.10.0
从那时开始发布,mypom.xml
要求使用范围compile
的版本0.10.0
。类似地,在我的项目中,我无法访问shellspoot
实例上的setEnv
。实际上,它是否可能没有进入0.10.0版本?如果0.10.0的测试版是在6月份,而setEnv的PR是在7月份,那么它会错过0.10.0版本,是吗?由于我的项目依赖于maven依赖项,我必须自己构建并包含Storm,以便能够使用setEnv
?也许这会有所帮助:谢谢你的链接。我目前正在尝试设置env
,就像您在该线程中所做的那样。你能解释一下为什么我得到的方法setEnv(Map)对于WordCountTopology.splitSession类型是未定义的吗?我的splitsense
扩展了ShellBolt
,我在Github中看到了setEnv
,但在这些中没有看到。我对风暴代码设置的误解?不知道为什么setEnv(Map)
是“未定义的”。。。它应该在那里。是的,那是我现在关注的地方,非常奇怪。我相信是在7月份推出的setEnv
公共关系0.10.0
从那时开始发布,mypom.xml
要求使用范围compile
的版本0.10.0
。类似地,在我的项目中,我无法访问shellspoot
实例上的setEnv
。实际上,它是否可能没有进入0.10.0版本?如果0.10.0的测试版是在6月份,而setEnv的PR是在7月份,那么它会错过0.10.0版本,是吗?由于我的项目依赖于maven依赖项,我必须自己构建并包含Storm才能使用setEnv
?