package com.alimama.quanjingmonitor.topology;
import java.util.Map;
import backtype.storm.Config;
import backtype.storm.StormSubmitter;
import backtype.storm.generated.AlreadyAliveException;
import backtype.storm.generated.InvalidTopologyException;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.tuple.Fields;
import backtype.storm.utils.Utils;
public class Topology {
public static void main(String[] args) throws AlreadyAliveException, InvalidTopologyException {
Map stormconf = Utils.readStormConfig();
Config conf = new Config();
conf.putAll(stormconf);
conf.put("topology.worker.childopts", "-Xms4g -Xmx4g -Xmn2g -XX:SurvivorRatio=3 -XX:PermSize=96m -XX:MaxPermSize=256m -XX:+UseParallelGC -XX:ParallelGCThreads=16 -XX:+UseAdaptiveSizePolicy -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:%storm.home%/logs/gc-%port%.log ");
conf.setMaxSpoutPending(10000);
int workescount=12;
conf.setMessageTimeoutSecs(60);
conf.setNumWorkers(workescount);
conf.setNumAckers(4);
if(args.length>0)
{
conf.put("pv-spout-start-time", args[0]);
conf.put("click-spout-start-time", args[0]);
conf.put("access-spout-start-time", args[0]);
}
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("pvmap", new PvSpout("pv-spout"), 48);
builder.setBolt("reduce", new SumReduceBolt("pv"), 16).fieldsGrouping("pvmap", new Fields("key") );
//builder.setSpout("accessmap", new AccessSpout("access-spout"), 24);
//builder.setBolt("accessreduce", new AccessReduceBolt("access"), 4).fieldsGrouping("accessmap", new Fields("hashkey") );
builder.setSpout("clickmap", new ClickSpout("click-spout"), 4);
builder.setBolt("clickreduce", new ClickReduceBolt("click"), 4).fieldsGrouping("clickmap", new Fields("hashkey") );
StormSubmitter.submitTopology("quanjingmointor", conf,builder.createTopology());
}
}