風暴的設計和製造,以處理數據的連續流。請參閱Rationale for the Storm。輸入數據不太可能輸入風暴集羣。一般來說,暴風雨的輸入數據來自JMS隊列,Apache Kafka或Twitter feeds等。我想,你想通過一些配置。在這種情況下,以下情況適用。考慮Storm的設計目的,可以將非常有限的配置細節傳遞給Storm,例如RDMBS連接細節(Oracle/DB2/MySQL等),JMS提供者詳細信息(IBM MQ/RabbitMQ等)或Apache Kafka細節/ Hbase等
對於特定的問題或提供上述產品的詳細配置信息,有我能想到
1三種方式。設置在噴水口或螺栓
的實例例如配置細節:聲明實例變量並分配值作爲噴出/螺栓構造如下
public class TestWordSpout extends BaseRichSpout {
List<String> listOfValues;
public TestWordSpout(List<String> listOfValues) {
this.listOfValues=listOfValues;
}
}
在拓撲提交類的一部分,創建脫粒機的實例與值的列表
List<String> listOfValues=new ArrayList<String>();
listOfValues.add("nathan");
listOfValues.add("golda");
listOfValues.add("mike");
builder.setSpout("word", new TestWordSpout(listOfValues), 3);
這些值可作爲nextTuple()
方法實例變量
請在Storm contrib上查看關於RDBMS/Kafka等設置的風暴集成
2.在getComponentConfiguration()
中設置配置。這種方法被用來覆蓋拓撲的配置,然而,可以在幾細節通過如下
@Override
public Map<String, Object> getComponentConfiguration() {
Map<String, Object> ret = new HashMap<String, Object>();
if(!_isDistributed) {
ret.put(Config.TOPOLOGY_MAX_TASK_PARALLELISM, 1);
return ret;
} else {
List<String> listOfValues=new ArrayList<String>();
listOfValues.add("nathan");
listOfValues.add("golda");
listOfValues.add("mike");
ret.put("listOfValues", listOfValues);
}
return ret;
}
和配置的細節中分別噴/螺栓的open() or prepare()
方法可用。
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
_collector = collector;
this.listOfValues=(List<String>)conf.get("listOfValues");
}
3.聲明屬性文件中的配置並將它作爲提交到Storm羣集的jar文件的一部分進行jar。 Nimbus節點將jar文件複製到工作節點,並使其可用於執行程序線程。 open()/ prepare()方法可以讀取屬性文件並分配給實例變量。
你是什麼意思? – Chiron
@Chiron:我更新了... –