使用python运行storm multilang时出错

7lrncoxx  于 2021-06-21  发布在  Storm
关注(0)|答案(3)|浏览(327)

我正在学习来自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页面没有提供太多有助于初学者调试所面临问题的信息。
任何帮助解决这个问题的人都将不胜感激。

wko9yo5t

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); 对于这种情况,不需要手动下载二进制版本。

7qhs6swi

7qhs6swi2#

如果其他人遇到此问题:
我也有同样的问题。但是,我无法通过将storm.py从二进制版本复制到我的resources目录来解决这个问题。
我的初始错误是“attributeerror:'module'对象没有属性'basicbolt'”
您可以将正确的maven依赖项添加到pom.xml中,这将把正确的依赖项复制到jar中。添加工件“multilang python”,groupid“org.apache.storm”,其版本与您的storm版本匹配,然后运行clean和package目标以生成更新的jar文件。

4bbkushb

4bbkushb3#

我找了不少地方才发现这个问题。实际上,问题不在指令本身,而是因为 storm.py 我在我的资源目录中包含的文件是一个旧的或不正确的版本-我通过谷歌搜索获得的网址,可能最终得到一个不正确的。
这个 storm.py 从这个github链接下载。我现在能成功地进行练习了。
谢谢大家的帮助。我会确保我张贴在udacity论坛,让人们知道这一困惑。

相关问题