💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 针对 Storm 定义一个不是 JVM 的 DSL 针对 Storm 开始学习如何使用非 JVM 的 DSL 的正确的地址是 [storm-core/src/storm.thrift](http://github.com/apache/storm/blob/master%0A/storm-core/src/storm.thrift). 由于 Storm topologies 只是 Thrift 的结构,Nimbus 是 Thrift 守护进程,您可以使用任何语言创建和提交 topologies. 当你针对 spouts 和 bolts 创建 Thrift 结构时, spout 和 bolt 的代码指定在 ComponentObject 结构中: ``` union ComponentObject { 1: binary serialized_java; 2: ShellComponent shell; 3: JavaObject java_object; } ``` 针对 Python DSL,您需要使用 "2" 和 "3". ShellComponent 可以让你指定一个脚本来运行组件(例如,你的 python 代码). 并且针对组件(Storm 将使用反射来创建 spout 和 bolt)JavaObject 可以让你指定本地的 java spouts 和 bolts. 以下是一个 "storm shell" 命令,它可以提交 topology. 用法如下: ``` storm shell resources/ python topology.py arg1 arg2 ``` Storm Shell resources/ 下的东西包装到一个 jar 中,将 jar 上传到 Nimbus,并像下面这样调用你的 topology.py 脚本: ``` python topology.py arg1 arg2 {nimbus-host} {nimbus-port} {uploaded-jar-location} ``` 然后您可以使用 Thrift API 连接到 Nimbus,并提交 topology,将 {uploaded-jar-location} 传递到 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 中要做的一件重要的事情是,可以轻松地在一个文件(bolts,spouts 和 topology 的定义)中定义整个 topology.