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 還有一件非常重要的事就是要確保可以在一個文件中方便地定義出完整的拓撲(bolts,spouts,以及拓撲的其他部分定義)。
最後更新:2017-05-22 13:32:17