Java 使用Python运行Storm MultiLang时出错

Java 使用Python运行Storm MultiLang时出错,java,python,apache-storm,Java,Python,Apache Storm,我正在学习Udacity的Apache Storm课程。使用的storm版本为0.9.3 其中一个练习是运行包含用Python编写的螺栓的拓扑。以下简要介绍了所遵循的步骤。在本练习中,我的源目录是src,包是udacity.storm 在udacity/storm下创建名为resources/的目录。在那里放置两个python脚本-splitsense.py和storm.py 在包udacity.storm下创建一个boltsplitsequenceSplitSessionbolt派生自Shel

我正在学习Udacity的Apache Storm课程。使用的storm版本为0.9.3

其中一个练习是运行包含用Python编写的螺栓的拓扑。以下简要介绍了所遵循的步骤。在本练习中,我的源目录是
src
,包是
udacity.storm

  • udacity/storm
    下创建名为
    resources/
    的目录。在那里放置两个python脚本-
    splitsense.py
    storm.py
  • 在包
    udacity.storm
    下创建一个bolt
    splitsequence
    SplitSession
    bolt派生自
    ShellBolt
    ,并实现
    IRichBolt
    接口
  • 使用maven构建拓扑。在此过程中,还要将
    resources/
    目录打包到JAR文件中
  • 使用命令
    storm jar target/mytopology.jar udacity.storm.mytopology
    将拓扑提交给storm
  • 拓扑立即加载并终止,我在控制台上看到以下错误

    storm客户端只能在版本内运行。你似乎 正在尝试从Storm的源代码签出运行客户端

    我查看了storm.py代码,发现如果执行python脚本的目录中不存在
    lib/
    目录,就会发生这种情况。在放入一些调试语句后,我确定python脚本从以下位置运行:

    /tmp/06380be9-d413-4ae5-b387-fafe3acf3e65/supervisor/stormdist/tweet-word-count-1-1449502750

    我导航到此目录,发现
    lib/
    文件夹不存在

    该页面没有提供太多有助于初学者调试所面临问题的信息


    非常感谢您为解决此问题提供的任何帮助。

    因为错误表明您尝试在源代码中运行。只需下载二进制版本并按照安装说明进行操作

    之后,您可以准备
    jar
    文件,并通过
    bin/storm jar yourJarFile.jar提交到集群(请参阅)


    无需手动下载源代码(只要您不想使用Storm本身)。只需将二进制版本中相应的jar文件包含到项目中即可。如果使用maven(并且仅在本地模式下运行),只需包含相应的maven依赖项(请参阅);在这种情况下,不需要手动下载二进制版本。

    经过大量的查找,我发现了这个问题。事实上,问题不在说明中,而是因为我在参考资料目录中包含的
    storm.py
    文件的版本较旧或不正确-我通过谷歌搜索获得了URL,结果可能不正确

    要下载的
    storm.py
    来自Github链接。我现在能够成功地进行练习了


    谢谢大家的帮助。我将确保我在Udacity论坛上发布此信息,以便人们了解混乱情况。

    如果其他人遇到此问题:

    我也有同样的问题。但是,我无法通过将storm.py从二进制版本复制到我的资源目录来解决这个问题

    我的初始错误是“AttributeError:“module”对象没有属性“BasicBolt”


    您可以将正确的Maven依赖项添加到pom.xml中,这将把正确的依赖项复制到您的JAR中。添加工件“multilang python”,groupId“org.apache.storm”,版本与您的storm版本匹配,然后运行clean和package目标生成更新的JAR文件。

    Udacity论坛上是否有人以前遇到过此问题?@morganw09dev感谢您的帮助。我已经在下面发布了我的发现,详细说明了错误的原因。谢谢你的帮助。但我在下面的回答中贴出了错误的原因。