gpt4 book ai didi

python - 如何在 Intellij 中从 storm-starter 运行 WordCount Topology

转载 作者:太空狗 更新时间:2023-10-29 22:29:53 26 4
gpt4 key购买 nike

我已经使用 Storm 一段时间了,但想开始开发。正如建议的那样,我正在使用 IntelliJ(到目前为止,我使用的是 Eclipse,并且只针对 Java API 编写拓扑)。

我也在看 https://github.com/apache/storm/tree/master/examples/storm-starter#intellij-idea

此文档不完整。我首先无法在 Intellij 中运行任何东西。我可以弄清楚,我需要删除 storm-core 依赖项的范围(在 storm-starter pom.xml 中)。 (在这里找到:storm-starter with intellij idea,maven project could not find class)

之后我就可以构建项目了。我还可以在 IntelliJ 中毫无问题地运行 ExclamationTopology。但是,WordCountTopology 失败了。

首先我得到了以下错误:

java.lang.RuntimeException: backtype.storm.multilang.NoOutputException: Pipe to subprocess seems to be broken! No output read. Serializer Exception: Traceback (most recent call last): File "splitsentence.py", line 16, in import storm ImportError: No module named storm

更新:不需要安装 python-storm 即可运行

我能够通过以下方式解决它:apt-get install python-storm(来自 StackOverflow)

但是,我不会说 Python,我想知道问题是什么以及为什么我可以这样解决它。只是想更深入地了解它。也许有人可以解释。

不幸的是,我现在遇到了不同的错误:

java.lang.RuntimeException: backtype.storm.multilang.NoOutputException: Pipe to subprocess seems to be broken! No output read. Serializer Exception: Traceback (most recent call last): File "splitsentence.py", line 18, in class SplitSentenceBolt(storm.BasicBolt): AttributeError: 'module' object has no attribute 'BasicBolt'

我在网上没有找到任何解决方案。在 dev@storm.apache.org 询问也无济于事。我接受以下建议:

I think that it was always assumed that topology would always be invoked through storm-command line. Thus working directory would be ${STORM-INSTALLATION}/bin/storm Since storm.py is in the this directory, splitSentence.py would be able to find storm modules. Can you set the working directory to a path, where storm.py is present and then try. If it works, we can add it later to the documentation

但是,改变工作目录并没有解决问题。

而且由于我不熟悉 Python 并且我是 IntelliJ 的新手,所以我现在被困住了。因为 ExclamationTopology 运行,我想我的基本设置是正确的。

我做错了什么?是否可以在 IntelliJ 的 LocalCluster 中运行 WordcountTopology

最佳答案

不幸的是,据我所知,如果没有打包文件,您将无法使用 LocalCluster 运行多语言功能。

ShellProcess依赖TopologyContext的codeDir,supervisor使用。Workers 被序列化为 stormcode.ser,但是 multilang 文件应该被提取到序列化文件之外,以便 python/ruby/node/etc 可以加载它。

用分发模式实现这个很容易,因为总是有用户提交的 jar,主管可以知道这是用户提交的。

但是用本地模式完成这个并不容易,因为主管无法知道用户提交的jar,用户可以在不打包的情况下将拓扑运行到本地模式。

因此,本地模式的 Supervisor 从类路径中的每个 jars(以“jar”结尾)中找到资源目录(“resources”),并将第一个出现的位置复制到 codeDir。

storm jar 将用户拓扑 jar 放在类路径的第一个,因此它可以毫无问题地运行。

所以通常情况下,ShellProcess 找不到“splitsentence.py”是很自然的。也许您的工作目录或 PYTHONPATH 起到了作用。

关于python - 如何在 Intellij 中从 storm-starter 运行 WordCount Topology,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31985819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com