【问题标题】:Assign memory for individual worker in storm为风暴中的单个工人分配内存
【发布时间】:2017-04-17 00:04:37
【问题描述】:

我需要为每个新工人分配不同的内存值。所以我尝试为每个螺栓和喷口更改内存。我目前也在使用自定义调度程序。这是我解决问题的方法。

我的代码:

TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new EmailSpout(), 1).addConfiguration("node", "zoo1").setMemoryLoad(512.0);
builder.setBolt("increment1", new IncrementBolt(), PARALLELISM).shuffleGrouping("spout").addConfiguration("node", "zoo2").setMemoryLoad(2048.0);
builder.setBolt("increment2", new IncrementBolt(), PARALLELISM).shuffleGrouping("increment1").addConfiguration("node", "zoo3").setMemoryLoad(2048.0);
builder.setBolt("increment3", new IncrementBolt(), PARALLELISM).shuffleGrouping("increment2").addConfiguration("node", "zoo4").setMemoryLoad(2048.0);
builder.setBolt("output", new OutputBolt(), 1).globalGrouping("increment2").addConfiguration("node", "zoo1").setMemoryLoad(512.0);
Config conf = new Config();
conf.setDebug(false);
conf.setNumWorkers(4);
StormSubmitter.submitTopologyWithProgressBar("Microbenchmark", conf, builder.createTopology());

我的 STORM.YAML:

 storm.zookeeper.servers:
     - "zoo1"
 storm.zookeeper.port: 2181
 nimbus.seeds: ["zoo1"]
 storm.local.dir: "/home/ubuntu/eranga/storm-data"
 supervisor.slots.ports:
     - 6700
     - 6701
     - 6702
     - 6703
     - 6704
 storm.scheduler: "org.apache.storm.scheduler.NodeBasedCustomScheduler"
 supervisor.scheduler.meta:
     node: "zoo4"
 worker.profiler.enabled: true
 worker.profiler.childopts: "-XX:+UnlockCommercialFeatures -XX:+FlightRecorder"
 worker.profiler.command: "flight.bash"
 worker.heartbeat.frequency.secs: 1
 worker.childopts: "-Xmx2048m -Xms2048m -Djava.net.preferIPv4Stack=true -Dorg.xml.sax.driver=com.sun.org.apache.xerces.internal.parsers.SAXParser -Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl -Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"

当我提交拓扑时,我收到以下错误。

错误:

线程“main”中的异常 java.lang.IllegalArgumentException:拓扑将无法成功调度:配置 TOPOLOGY_WORKER_MAX_HEAP_SIZE_MB=768.0

在 org.apache.storm.StormSubmitter.validateTopologyWorkerMaxHeapSizeMBConfigs(StormSubmitter.java:496)

有什么建议吗?

【问题讨论】:

    标签: java configuration apache-storm topology


    【解决方案1】:

    试试这个。

    import org.apache.storm.Config;
    
    public class TopologyExecuter{
       for(List<StormTopology> StormTopologyObject : StormTopologyObjects ){
           Config topologyConf = new Config();
           topologyConf.put(Config.TOPOLOGY_WORKER_CHILDOPTS,"-Xmx512m -Xms256m");
           StormSubmitter.submitTopology("topology name", topologyConf, StormTopologyObject);
       }
    
    }
    

    【讨论】:

      【解决方案2】:

      您是否尝试按照错误消息中的建议进行操作?

      也许将 TOPOLOGY_WORKER_MAX_HEAP_SIZE_MB 设置为更大的数量

      尝试将其添加到storm.yaml:

      topology.worker.max.heap.size.mb=2048.0 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 2016-01-08
        相关资源
        最近更新 更多