1. 程式人生 > >Apache Storm 官方文件 —— 定義 Storm 的非 JVM 語言 DSL

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,以及拓撲的其他部分定義)。