【问题标题】:How to integrate a python bolt to a java topology for Apache Storm?如何将 python bolt 集成到 Apache Storm 的 java 拓扑中?
【发布时间】:2018-06-05 05:56:31
【问题描述】:

我试图将一个简单的 Python Bolt 集成到使用 Apache Storm 和 Storm Crawler SDK 创建的已配置风暴拓扑中。 我按照here提供的说明进行操作

但我不断收到错误:

java.lang.Exception: Shell Process Exception: Traceback (most recent call last):
  File "D:\<PATH>\storm.py", line 217, in run
    tup = readTuple()
  File "D:\<PATH>\storm.py", line 74, in readTuple
    cmd = readCommand()
  File "D:\<PATH>\storm.py", line 67, in readCommand
    msg = readMsg()
  File "D:\<PATH>\storm.py", line 42, in readMsg
    return json_decode(msg[0:-1])
  File "D:\<PATH>\storm.py", line 30, in <lambda>
    json_decode = lambda x: json.loads(x)
  File "C:\Users\akumar\AppData\Local\Continuum\Anaconda2\lib\json\__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "C:\Users\akumar\AppData\Local\Continuum\Anaconda2\lib\json\decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\akumar\AppData\Local\Continuum\Anaconda2\lib\json\decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

    at org.apache.storm.task.ShellBolt.handleError(ShellBolt.java:227) [storm-core-1.2.1.jar:1.2.1]
    at org.apache.storm.task.ShellBolt.access$1100(ShellBolt.java:72) [storm-core-1.2.1.jar:1.2.1]
    at org.apache.storm.task.ShellBolt$BoltReaderRunnable.run(ShellBolt.java:348) [storm-core-1.2.1.jar:1.2.1]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_171]
96398 [Thread-40] ERROR o.a.s.t.ShellBolt - Halting process: ShellBolt died. Command: [python, D:/<PATH>/ClassifyBolt.py], ProcessInfo pid:12708, name:classify exitCode:0, errorString: 
java.lang.RuntimeException: org.apache.storm.multilang.NoOutputException: Pipe to subprocess seems to be broken! No output read.
Serializer Exception:


    at org.apache.storm.utils.ShellProcess.readShellMsg(ShellProcess.java:127) ~[storm-core-1.2.1.jar:1.2.1]
    at org.apache.storm.task.ShellBolt$BoltReaderRunnable.run(ShellBolt.java:330) [storm-core-1.2.1.jar:1.2.1]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_171]
96399 [Thread-40] ERROR o.a.s.d.executor - 
java.lang.RuntimeException: org.apache.storm.multilang.NoOutputException: Pipe to subprocess seems to be broken! No output read.
Serializer Exception:


    at org.apache.storm.utils.ShellProcess.readShellMsg(ShellProcess.java:127) ~[storm-core-1.2.1.jar:1.2.1]
    at org.apache.storm.task.ShellBolt$BoltReaderRunnable.run(ShellBolt.java:330) [storm-core-1.2.1.jar:1.2.1]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_171]

我试图在 Storm-crawler 网站的示例爬虫示例提供程序中添加创建的螺栓。在我看来,python bolt 似乎没有从拓扑中的前一个组件获取流。

有人可以帮忙吗?

【问题讨论】:

    标签: java python serialization apache-storm stormcrawler


    【解决方案1】:

    这可能是由于您的 bolt 的 python 进程将一些日志输出打印到标准输出。默认情况下,多语言 Storm bolts 使用进程的 stdin/stdout 与 Java 进程通信。

    使用pystorm 作为您的 Python bolt 基础架构将允许您使用不同的流进行此通信,例如 UNIX 命名管道或套接字,并为通常的日志记录释放标准输出。

    【讨论】:

    • 不太可能。 python进程无法读取Tuple,不是ShellBolt impl无法读取python输出。
    • @ndtreviv 你能解释一下你的评论吗?
    猜你喜欢
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2018-10-01
    • 2023-04-02
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多