# 使用没有jvm的语言编辑storm
* 两部分:创建topologies 以及 使用其他语言来实现 spouts 和bolts
* 用另一种语言创建topologies 是比较容易的,因为topologies 用的是[thrift](link%20to%20storm.thrift) 的结构
* 用另一种语言实现 spouts 和 bolts 被称为“multilang components ”或“shelling ”
* 以下是协议的规范: [Multilang协议](Multilang-protocol.html)
* thrift 结构允许你将多个组件明确定义为程序和脚本(例如,使用python编写你的bolt 的文件)
* 在Java中,您可以通过重写ShellBolt或ShellSpout来创建multilang组件
* 请注意,输出字段声明发生在thrift 结构中,所以在java中创建multilang 组件需要按照以下方式 :
* 在java中声明字段,通过在shellbolt的构造函数中指定它来处理另一种语言的代码
* multilang使用stdin / stdout上的json消息与子进程进行通信
* storm 带有Ruby、Python和实现协议的奇特适配器。下面展示一个python的示例 - python支持emitting, anchoring, acking, 以及 logging
* “storm shell ”命令使得构建jar和上传到nimbus变得更加容易 - 创建jar以及上传它
* 使用主机/端口nimbus和jarfile id来调用你的程序
## 关于在非JVM语言中实现DSL的注意事项
正确的打开方式地方是src / storm.thrift。由于storm topologies 是Thrift结构,Nimbus是Thrift守护进程,您可以使用任何语言创建和提交topologies 。
当您为spouts 和bolts 创建Thrift结构体时,将在ComponentObject结构体中指定spout 或bolt 的代码:
```
union ComponentObject {
1: binary serialized_java;
2: ShellComponent shell;
3: JavaObject java_object;
}
```
对于非JVM DSL,您需要使用“2”和“3”。 ShellComponent允许您指定运行该组件的脚本(例如,您的python代码)。而JavaObject允许您为组件指定本地java的spout 和bolt (Storm将使用反射来创建该spout 或bolt )。
有一个“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);
```
- Storm 基础
- 概念
- Scheduler(调度器)
- Configuration
- Guaranteeing Message Processing
- 守护进程容错
- 命令行客户端
- Storm UI REST API
- 理解 Storm Topology 的 Parallelism(并行度)
- FAQ
- Layers on Top of Storm
- Storm Trident
- Trident 教程
- Trident API 综述
- Trident State
- Trident Spouts
- Trident RAS API
- Storm SQL
- Storm SQL 集成
- Storm SQL 示例
- Storm SQL 语言参考
- Storm SQL 内部实现
- Flux
- Storm 安装和部署
- 设置Storm集群
- 本地模式
- 疑难解答
- 在生产集群上运行 Topology
- Maven
- 安全地运行 Apache Storm
- CGroup Enforcement
- Pacemaker
- 资源感知调度器 (Resource Aware Scheduler)
- 用于分析 Storm 的各种内部行为的 Metrics
- Windows 用户指南
- Storm 中级
- 序列化
- 常见 Topology 模式
- Clojure DSL
- 使用没有jvm的语言编辑storm
- Distributed RPC
- Transactional Topologies
- Hooks
- Storm Metrics
- Storm 状态管理
- Windowing Support in Core Storm
- Joining Streams in Storm Core
- Storm Distributed Cache API
- Storm 调试
- 动态日志级别设置
- Storm Logs
- 动态员工分析
- 拓扑事件检查器
- Storm 与外部系统, 以及其它库的集成
- Storm Kafka Integration
- Storm Kafka 集成(0.10.x+)
- Storm HBase Integration
- Storm HDFS Integration
- Storm Hive 集成
- Storm Solr 集成
- Storm Cassandra 集成
- Storm JDBC 集成
- Storm JMS 集成
- Storm Redis 集成
- Azue Event Hubs 集成
- Storm Elasticsearch 集成
- Storm MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输) 集成
- Storm MongoDB 集成
- Storm OpenTSDB 集成
- Storm Kinesis 集成
- Storm Druid 集成
- Storm and Kestrel
- Container, Resource Management System Integration
- Storm 高级
- 针对 Storm 定义一个不是 JVM 的 DSL
- 多语言协议
- Storm 内部实现
- 翻译进度