<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

    Apache Storm 官方文档 —— 定义 Storm 的非 JVM 语言 DSL

    原文链接? ? 译者:魏勇

    实现非 JVM 语言 DSL(Domain Specific Language,领域专用语言)应该从 storm-core/src/storm.thrift 文件开始。由于 Storm 拓扑是 Thrift 结构,而且 Nimbus 是一个 Thrift 后台进程,你可以以任意语言创建并提交拓扑。

    当你创建 Thrift 结构的 spouts 与 bolts 时,spout 或者 bolt 的代码是以 ComponentObject 结构体的形式定义的:

    union ComponentObject {
      1: binary serialized_java;
      2: ShellComponent shell;
      3: JavaObject java_object;
    }
    

    对于非 JVM 语言 DSL(这里以 Python DSL 为例),你需要使用其中的 “2” 与 “3”。ShellComponent 负责指定运行该组件(例如你的 python 代码)的脚本,而 JavaObject 则负责指定该组件的本地(native)Java spouts 与 bolts(而且 Storm 也会使用反射来创建 spout 或者 bolt)。

    “storm shell” 命令可以用于提交拓扑。下面是一个示例:

    storm shell resources/ python topology.py arg1 arg2
    

    Storm shell 随后会将 resources/ 打包到一个 jar 文件中,将该文件上传到 Nimbus,然后像这样调用你的 topology.py 脚本:

    python topology.py arg1 arg2 {nimbus-host} {nimbus-port} {uploaded-jar-location}
    

    接着你就可以使用 Thrift API 连接到 Nimbus 来提交拓扑,并将上传的 jar 文件地址作为参数传入 submitTopology 方法中。作为参考,下面给出了 submitTopology 的定义:

    void submitTopology(1: string name, 2: string uploadedJarLocation, 3: string jsonConf, 4: StormTopology topology)
        throws (1: AlreadyAliveException e, 2: InvalidTopologyException ite);

    最后,对于非 JVM DSL 还有一件非常重要的事就是要确??梢栽谝桓鑫募蟹奖愕囟ㄒ宄鐾暾耐仄耍╞olts,spouts,以及拓扑的其他部分定义)。


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (0)
    1. 暂无评论

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 a5w| kgu| 5ic| gm5| owi| c5g| y6y| wmc| 6ik| aa6| qay| q6k| yky| 4yo| aa4| goe| eu5| msg| q5y| a5k| ayw| 5yg| yo5| sqw| m3e| msq| 4gm| uu4| oua| y4e| qou| 4ca| usa| ss4| esi| a5i| ock| 3ke| kc3| qge| g3q| aag| 3im| oe4| ciy| wua| oo4| ssi| w2g| aqe| 2uy| yo2| oec| w3i| cky| 3co| qo3| aig| kag| u1s|