【问题标题】:How to develop (locally) and deploy Storm Topology (remotely)?如何(本地)开发和部署 Storm Topology(远程)?
【发布时间】:2014-09-04 20:51:57
【问题描述】:

我目前在 Windows 机器上使用 Netbeans 开发拓扑。当我以本地模式部署时:
LocalCluster cluster = new LocalCluster(); cluster.submitTopology("word-count", conf, builder.createTopology());
一切正常,但是当我尝试时:
StormSubmitter.submitTopology("word", conf, builder.createTopology());
它显然试图以集群模式部署拓扑并失败,因为我没有在我的本地计算机上运行风暴雨云。我确实在一个 Digital Ocean 液滴上部署了storm,但我当前(且不方便)的解决方案是复制 JAR 文件并使用 storm jar... 命令进行部署。
我的问题是:有没有办法告诉 Netbeans 我的 nimbus IP 地址是什么,以便它可以远程部署它? (并节省我的时间)
提前谢谢您!

【问题讨论】:

  • 我花了几个小时试图找到解决方案。我知道我可以在本地运行storm客户端并使用storm.yaml来配置我的nimbus IP或者使用storm jar-c.....有没有办法在submitTopology时在我们传递的配置中提到nimbus?

标签: java netbeans cluster-computing apache-storm nimbus


【解决方案1】:

Check this link
现在我可以在 Netbeans 中开发拓扑,在本地测试它们,并最终将它们部署到集群上的 Nimbus。这个解决方案对我很有用!!!
添加到配置文件:
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.
干杯!

【讨论】:

    【解决方案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

    【讨论】:

    • 那么,在这种情况下,应该在 TestStormRunner-0.0.1-SNAPSHOT-jar-with-dependencies.jar 中定义没有拓扑类的 spouts 和 bolts 吗?因为,我们在给定的代码 sn-p 中确实有 topologyBuilder
    • 不,我们还需要在 TestStormRunner 中添加拓扑类,因为在 StormSubmitter 中我们没有设置 Spout 和 bolts。在目标拓扑中完成
    • 啊现在我知道问题的原因了,我确实在 RemoteSubmitter 类(负责发送 jar)和 topology.jar 中定义了 StormSubmitter.submitTopology(...)。据我了解,我应该在 RemoteSubmitter 和 topology.jar 中定义 setBolt 和 setSpout,在 RemoteSubmitter 中定义 StormSubmitter.submitTopology(...) 而不是在 topology.jar 中,对吧?
    • 您好,我知道这是一篇旧帖子,但能否请您也放上拓扑示例。我的拓扑是从命令行部署的,但使用上面的代码无法使用相同的拓扑。我可以在 Storm UI 中看到拓扑,但 Spout 和 Bolts 没有启动。
    • @tyagi:我刚才看到了你的评论。您可以参考答案中的博客链接,有拓扑的代码。
    【解决方案3】:

    您可以使用conf 映射参数传递这些信息.. 您可以根据您的要求传递一个键值对

    对于接受的参数列表检查this页面..

    【讨论】:

      猜你喜欢
      • 2020-12-14
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多