我正在接受Udacity的Apache Storm课程。正在使用的风暴版本是 0.9.3
其中一个练习是运行包含用Python编写的螺栓的拓扑。这里简要介绍了所遵循的步骤。出于本练习的目的,我的源目录是src
,我的包是udacity.storm
resources/
下创建名为udacity/storm
的目录。在那里放置两个python脚本 - splitsentence.py
和storm.py
。SplitSentence
下创建一个udacity.storm
螺栓。 SplitSentence
bolt派生自ShellBolt
并实现IRichBolt
接口。resources/
目录打包在JAR文件中。storm jar target/mytopology.jar udacity.storm.MyTopology
拓扑加载并立即死亡,我在控制台上看到以下错误
风暴客户端只能在发布版本中运行。你似乎 试图通过结账Storm的源代码来运行客户端。
我看了一下 storm.py 代码,并发现如果执行python脚本的目录中不存在lib/
目录,就会发生这种情况。在输入一些调试语句后,我发现python脚本从以下位置运行:
的/ tmp / 06380be9-d413-4ae5-B387-fafe3acf3e65 /主管/ stormdist /鸣叫-字计数1-1449502750
我导航到此目录,发现lib/
文件夹不存在。
Storm Multilang页面没有提供有助于初学者调试所面临问题的大量信息。
非常感谢任何有助于解决此问题的帮助。
答案 0 :(得分:0)
正如错误所示,您尝试在源代码中运行。只需下载二进制版本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);对于这种情况,无需手动下载二进制版本。
答案 1 :(得分:0)
经过一段时间的考虑,我遇到了问题。实际上,问题不在说明书本身,而是因为我在资源目录中包含的storm.py
文件版本较旧或版本不正确 - 我通过Google搜索获得了该网址,但可能最终导致错误之一。
要下载的storm.py
来自this Github链接。我现在能够成功地进行练习。
谢谢大家的帮助。我将确保在Udacity论坛中发布此内容,以便人们意识到这种混淆。
答案 2 :(得分:0)
如果其他人遇到此问题:
我有同样的问题。但是,我无法通过将storm.py从二进制版本复制到我的资源目录来解决它。
我的初始错误是“AttributeError:'module'对象没有属性'BasicBolt'”
您可以将正确的Maven依赖项添加到您的pom.xml,它将正确的依赖项复制到您的JAR中。添加工件“multilang-python”,groupId“org.apache.storm”,其版本与您的Storm版本匹配,然后运行clean和package目标以生成更新的JAR文件。