使用Python

时间:2015-12-07 17:32:44

标签: java python apache-storm

我正在接受Udacity的Apache Storm课程。正在使用的风暴版本是 0.9.3

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

  1. resources/下创建名为udacity/storm的目录。在那里放置两个python脚本 - splitsentence.pystorm.py
  2. 在包SplitSentence下创建一个udacity.storm螺栓。 SplitSentence bolt派生自ShellBolt并实现IRichBolt接口。
  3. 使用maven构建拓扑。在此过程中还将resources/目录打包在JAR文件中。
  4. 使用命令storm jar target/mytopology.jar udacity.storm.MyTopology
  5. 将拓扑提交到风暴

    拓扑加载并立即死亡,我在控制台上看到以下错误

      

    风暴客户端只能在发布版本中运行。你似乎   试图通过结账Storm的源代码来运行客户端。

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

      

    的/ tmp / 06380be9-d413-4ae5-B387-fafe3acf3e65 /主管/ stormdist /鸣叫-字计数1-1449502750

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

    Storm Multilang页面没有提供有助于初学者调试所面临问题的大量信息。

    非常感谢任何有助于解决此问题的帮助。

3 个答案:

答案 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文件。