2014-09-04 95 views
4

我目前与Windows机器上的Netbeans一起开发拓扑结构。当我部署在本地模式:
LocalCluster cluster = new LocalCluster(); cluster.submitTopology("word-count", conf, builder.createTopology());
一切工作得很好,但是当我尝试:
StormSubmitter.submitTopology("word", conf, builder.createTopology());
它显然试图部署在集群模式下的拓扑结构和失败,因为我没有上运行的风暴灵气我本地计算机。我确实在一个数字海洋液滴上部署了风暴,但是我目前(并不方便)的解决方案是复制JAR文件并使用storm jar...命令进行部署。
我的问题是:有没有办法告诉Netbeans我的nimbus IP地址是什么,所以它可以远程部署它? (并节省我的时间)
预先感谢您!如何开发(本地)并部署Storm拓扑(远程)?

+0

我花了几个小时,试图找到一个解决方案。我知道我可以在本地运行风暴客户端并使用storm.yaml来配置我的nimbus IP或者使用风暴罐'-c .....'在submitTopology时我们通过的配置中有没有提到nimbus的方法? – 2014-09-04 21:02:51

回答

5

Check this link
现在我可以在Netbeans中开发拓扑,在本地测试它们,并最终将它们部署到集群上的Nimbus。这个解决方案对我很好!
加入的conf文件:
conf.put(Config.NIMBUS_HOST, "123.456.789.101); //YOUR NIMBUS'S IP conf.put(Config.NIMBUS_THRIFT_PORT,6627); //int is expected here

此外,添加以下内容: System.setProperty("storm.jar", <path-to-jar>); //link to exact file location (w/ dependencies) 避免以下错误:
[main] INFO backtype.storm.StormSubmitter - Jar not uploaded to master yet. Submitting jar... Exception in thread "main" java.lang.RuntimeException: Must submit topologies using the 'storm' client script so that StormSubmitter knows which jar to upload.
干杯!

1

您可以通过使用conf地图参数的信息..你可以通过一键,值对按您的要求

为接受的参数列表来检查this网页..

2

是的,你肯定可以告诉你的拓扑你的nimbus IP。以下是在远程集群上提交拓扑的示例代码。

Map storm_conf = Utils.readStormConfig(); 
storm_conf.put("nimbus.host", "<Nimbus Machine IP>"); 
Client client = NimbusClient.getConfiguredClient(storm_conf) 
           .getClient(); 
String inputJar = "C:\\workspace\\TestStormRunner\\target\\TestStormRunner-0.0.1-SNAPSHOT-jar-with-dependencies.jar"; 
NimbusClient nimbus = new NimbusClient(storm_conf, "<Nimbus Machine IP>", 
           <Nimbus Machine Port>); 
// upload topology jar to Cluster using StormSubmitter 
String uploadedJarLocation = StormSubmitter.submitJar(storm_conf, 
           inputJar); 

String jsonConf = JSONValue.toJSONString(storm_conf); 
nimbus.getClient().submitTopology("testtopology", 
         <uploadedJarLocation>, jsonConf, builder.createTopology()); 

这里是工作示例:Submitting a topology to Remote Storm Cluster

+0

因此,在这种情况下,应该在TestStormRunner-0.0.1-SNAPSHOT-jar-with-dependencies.jar中定义没有拓扑类的喷口和螺栓?因为我们确实在给定的代码片段 – Humoyun 2015-11-12 02:32:50

+0

中有topologyBuilder不,我们还需要在TestStormRunner中添加拓扑类,因为从StormSubmitter我们不设置Spout和螺栓。那是在目标拓扑 – 2015-11-12 03:44:10

+0

啊现在我知道我的问题的原因,我在RemoteSubmitter类(它负责发送jar)和topology.jar中都定义了StormSubmitter.submitTopology(...)。据我所知,我应该在RemoteSubmitter和topology.jar中定义setBolt和setSpout,在RemoteSubmitter中定义StormSubmitter.submitTopology(...),而不是在topology.jar中,对吧? – Humoyun 2015-11-12 11:20:49