运行 Storm MultiLang 使用 Python 时出错
Error while running Storm MultiLang using Python
我正在学习 Udacity 的 Apache Storm 课程。使用的风暴版本是 0.9.3
那里的练习之一是 运行 一个包含用 Python 编写的螺栓的拓扑。这里简要介绍了所遵循的步骤。出于本练习的目的,我的源目录是 src
,我的包是 udacity.storm
- 在
udacity/storm
下创建名为 resources/
的目录。在此处放置两个 python 脚本 - splitsentence.py
和 storm.py
.
- 在包
udacity.storm
下创建一个螺栓 SplitSentence
。 SplitSentence
bolt 派生自 ShellBolt
并实现了 IRichBolt
接口。
- 使用 maven 构建拓扑。在此过程中还将
resources/
目录打包到 JAR 文件中。
- 使用命令
storm jar target/mytopology.jar udacity.storm.MyTopology
. 将拓扑提交到 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 文件。
我正在学习 Udacity 的 Apache Storm 课程。使用的风暴版本是 0.9.3
那里的练习之一是 运行 一个包含用 Python 编写的螺栓的拓扑。这里简要介绍了所遵循的步骤。出于本练习的目的,我的源目录是 src
,我的包是 udacity.storm
- 在
udacity/storm
下创建名为resources/
的目录。在此处放置两个 python 脚本 -splitsentence.py
和storm.py
. - 在包
udacity.storm
下创建一个螺栓SplitSentence
。SplitSentence
bolt 派生自ShellBolt
并实现了IRichBolt
接口。 - 使用 maven 构建拓扑。在此过程中还将
resources/
目录打包到 JAR 文件中。 - 使用命令
storm jar target/mytopology.jar udacity.storm.MyTopology
. 将拓扑提交到 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 文件。