运行 Storm MultiLang 使用 Python 时出错

Error while running Storm MultiLang using Python

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

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

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

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

The storm client can only be run from within a release. You appear to be trying to run the client from a checkout of Storm's source code.

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

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

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

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

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

如错误所述,您尝试在源代码中 运行。只需下载二进制版本 https://storm.apache.org/downloads.html and follow the setup instructions 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);对于这种情况,无需手动下载二进制版本。

经过相当多的环顾四周,我发现了问题。实际上,问题不在说明本身,而是因为我包含在资源目录中的 storm.py 文件是旧版本或不正确的版本 - 我通过 Google 获得了 URL搜索并可能以错误的方式结束。

要下载的storm.py来自thisGithublink。我现在可以运行 练习成功了。

谢谢大家的帮助。我会确保 post 在 Udacity 论坛上发布此内容,以便人们意识到这一困惑。

如果其他人遇到此问题:

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

我最初的错误是 "AttributeError: 'module' object has no attribute 'BasicBolt'"

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