storm多种编程语言优缺点

    xiaoxiao2021-03-26  37

    除了用Java实现spout和bolt,你还可以使用任何你熟悉的编程语言来完成这项工作,这一切得益于Storm所谓的多语言协议。多语言协议是Storm内部的一种特殊协议,允许spout或者bolt使用标准输入和标准输出来进行消息传递,传递的消息为单行文本或者是json编码的多行。

    Storm支持多语言编程主要是通过ShellBolt,ShellSpout和ShellProcess这些类来实现的,这些类都实现了IBolt 和 ISpout接口,以及让shell通过java的ProcessBuilder类来执行脚本或者程序的协议。

    可以看到,采用这种方式,每个tuple在处理的时候都需要进行json的编解码,因此在吞吐量上会有较大影响。

    用其他语言定义Bolts

    Bolts 可以用任何语言定义。用其他语言写的 Bolts ,是以子进程的方式运行,storm与子进程通信的方式是 通过输入输出 JSON 数据来实现的。通信协议只需要1个100行的适配器代码的库, Storm附带了 Ruby, Python, and Fancy 的适配器的库。

    这是 SplitSentence bolt 的定义,来自于 WordCountTopology:

    public static class SplitSentence extends ShellBolt implements IRichBolt { public SplitSentence() { super("python", "splitsentence.py"); } public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declare(new Fields("word")); } }

    SplitSentence 覆盖 ShellBolt 并声明用  python ,运行文件为 splitsentence.py. 这是 splitsentence.py的实现:

    import storm class SplitSentenceBolt(storm.BasicBolt): def process(self, tup): words = tup.values[0].split(" ") for word in words: storm.emit([word]) SplitSentenceBolt().run()

    更多关于用其他语言编写 spout 和 bolt 的信息,创建topology的信息 (以及完全避免 JVM 的方式), 请参见 Using non-JVM languages with Storm.

    转载请注明原文地址: https://ju.6miu.com/read-663475.html

    最新回复(0)