我正在学习来自udacity的有关apache storm的课程。使用的storm版本是0.9.3
其中一个练习是运行一个包含用python编写的bolt的拓扑。以下是简单的步骤。在本练习中,我的源目录是 src
我的包裹是 udacity.storm
创建名为 resources/
低于 udacity/storm
. 在那里放置两个python脚本- splitsentence.py
以及 storm.py
.
创建螺栓 SplitSentence
在包裹下面 udacity.storm
. SplitSentence
螺栓源于 ShellBolt
并实施 IRichBolt
接口。
使用maven构建拓扑。在这个过程中,还需要 Package resources/
jar文件中的目录。
使用命令将拓扑提交到storm storm jar target/mytopology.jar udacity.storm.MyTopology
.
拓扑加载并立即终止,我在控制台上看到以下错误
storm客户端只能从版本中运行。您似乎试图从storm的源代码 checkout 中运行客户端。
我查看了storm.py代码,发现如果 lib/
执行python脚本的目录中不存在目录。在放入一些调试语句后,我确定python脚本从以下位置运行:
/tmp/06380be9-d413-4ae5-b387-fafe3acf3e65/主管/stormdist/tweet-word-count-1-1449502750
我导航到这个目录,发现 lib/
文件夹不存在。
storm multilang页面没有提供太多有助于初学者调试所面临问题的信息。
任何帮助解决这个问题的人都将不胜感激。
3条答案
按热度按时间wko9yo5t1#
正如错误所说,您尝试在源代码中运行。只需下载二进制版本https://storm.apache.org/downloads.html 并按照安装说明进行操作https://storm.apache.org/documentation/setting-up-a-storm-cluster.html
之后,你可以准备
jar
文件并通过提交到集群bin/storm jar yourJarFile.jar
(见https://storm.apache.org/documentation/command-line-client.html)无需手动下载源代码(只要您不想使用storm本身)。只需将二进制版本中相应的jar文件包含到您的项目中。如果您使用maven(并且只在本地模式下运行),只需包含相应的maven依赖项(请参阅https://storm.apache.org/documentation/maven.html); 对于这种情况,不需要手动下载二进制版本。
7qhs6swi2#
如果其他人遇到此问题:
我也有同样的问题。但是,我无法通过将storm.py从二进制版本复制到我的resources目录来解决这个问题。
我的初始错误是“attributeerror:'module'对象没有属性'basicbolt'”
您可以将正确的maven依赖项添加到pom.xml中,这将把正确的依赖项复制到jar中。添加工件“multilang python”,groupid“org.apache.storm”,其版本与您的storm版本匹配,然后运行clean和package目标以生成更新的jar文件。
4bbkushb3#
我找了不少地方才发现这个问题。实际上,问题不在指令本身,而是因为
storm.py
我在我的资源目录中包含的文件是一个旧的或不正确的版本-我通过谷歌搜索获得的网址,可能最终得到一个不正确的。这个
storm.py
从这个github链接下载。我现在能成功地进行练习了。谢谢大家的帮助。我会确保我张贴在udacity论坛,让人们知道这一困惑。