# 使用沒有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 內部實現
- 翻譯進度