java - <InvalidTopologyException InvalidTopologyException(msg :Field storm. zookeeper.servers 必须是 java.lang.String 的 Iterable)>

标签 java yaml apache-storm

我拿了示例字数统计代码并尝试提交到远程 nimbus 服务器而不提交到 LocalCluster。我在客户端使用了以下代码和以下 yaml 配置服务器和 ZK 分别启动。

当我在客户端使用以下代码提交时,当我运行 ./storm jar file/path/jar-file.jar 时出现以下错误

ut.pending":5000,"storm.zookeeper.servers":"149.160.221.43","topology.max.task.parallelism":3}
308  [main] WARN  backtype.storm.StormSubmitter - Topology submission exception: Field     storm.zookeeper.servers must be an Iterable of java.lang.String
Exception in thread "main" InvalidTopologyException(msg:Field storm.zookeeper.servers must be an Iterable of java.lang.String)
at backtype.storm.generated.Nimbus$submitTopology_result.read(Nimbus.java:2466)
at org.apache.thrift7.TServiceClient.receiveBase(TServiceClient.java:78)
at backtype.storm.generated.Nimbus$Client.recv_submitTopology(Nimbus.java:162)
at backtype.storm.generated.Nimbus$Client.submitTopology(Nimbus.java:146)
at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:98)
at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:58)
at storm.starter.WordCountTopology.main(WordCountTopology.java:110)

拓扑构建代码:

System.setProperty("storm.jar","/Users/lginnali/work/airavata/storm/storm/examples/storm-starter/target/storm-starter-0.10.0-SNAPSHOT.jar");
TopologyBuilder builder = new TopologyBuilder();

builder.setSpout("spout", new RandomSentenceSpout(), 5);

BoltDeclarer split = builder.setBolt("split", new SplitSentence(), 8);
split.shuffleGrouping("spout");
builder.setBolt("count", new WordCount(), 12).fieldsGrouping("split", new Fields("word"));

Config conf = new Config();
conf.put(Config.NIMBUS_HOST, "localhost");
conf.put(Config.NIMBUS_THRIFT_PORT,6627);
conf.put(Config.STORM_ZOOKEEPER_PORT,2181);
conf.put(Config.STORM_ZOOKEEPER_SERVERS,"localhost");
conf.setNumWorkers(20);
conf.setMaxSpoutPending(5000);


if (args != null && args.length > 0) {
    conf.setNumWorkers(3);

    StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
}

sample storm.yaml 看起来像这个文件。

https://github.com/apache/storm/blob/master/conf/defaults.yaml

最佳答案

正是异常所说的:Config.STORM_ZOOKEEPER_SERVERS 应该是一个可迭代的字符串,而不是一个字符串。所以尝试更换

conf.put(Config.STORM_ZOOKEEPER_SERVERS,"localhost");

conf.put(Config.STORM_ZOOKEEPER_SERVERS, Arrays.asList(new String[]{"localhost"}));

关于java - <InvalidTopologyException InvalidTopologyException(msg :Field storm. zookeeper.servers 必须是 java.lang.String 的 Iterable)>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27279551/

相关文章:

symfony - 如何在 Yaml 中将参数值与常量字符串连接起来

java - Storm 如何处理垃圾收集?

java - OOP:哪个类应该拥有一个方法?

java - 在java中检查互联网连接

r - 在YAML中使用R代码或Windows用户变量("%userprofile%")?

python - conda 自动更新 requirements.yml

distributed-computing - Storm 如何管理集群模式下的共享数据?

java - 使用Maven构建storm-starter

java - XAMPP 上的 Tomcat 不会为 JAVA_HOME 启动

java - 玩! Framework 2.0.3,i18n 错误,预期为 `=',但发现为 `-'