关于storm简单程序的例子
spout:
package basev3;
import org.apache.storm.Config;
import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichSpout;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values;
import org.apache.storm.utils.Utils;
import java.util.Map;
public class MySport extends BaseRichSpout {
private SpoutOutputCollector collector_;
Fields f = new Fields("aa");
//该方法在task启动的时候运行一次用于得到conf,TopologyContext,SpoutOutputCollector
//以为可以创建消费者客户端用于nextTuple取数据
@Override
public Map<String, Object> getComponentConfiguration() {
Config conf = new Config();
//设置*秒(时间可配)发送一次tick心跳
conf.put(conf.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 300);
return conf;
}
@Override
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
collector_=collector;
}
@Override
//一直调用该方法给blot发射数据
public void nextTuple() {
Utils.sleep(3000);
// System.out.println(new Date().getTime());
collector_.emit(new Values("aaaa"));
}
@Override
//定义发射数据的名称
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(f);
}
}
blot
package basev3;
import org.apache.storm.Config;
import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Tuple;
import java.util.Map;
public class Myblot extends BaseRichBolt {
@Override
public Map<String, Object> getComponentConfiguration() {
Config conf = new Config();
//设置*秒(时间可配)发送一次tick心跳
conf.put(conf.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 300);
return conf;
}
//类似于spoutopen方法
@Override
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
}
//可以利用 prepare 方法中的OutputCollector 给下一个blot发射数据,也可以做其他处理
@Override
public void execute(Tuple input) {
System.out.println(input.getString(0));
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
}
}
运行topo的方法
package basev3;
import org.apache.storm.Config;
import org.apache.storm.StormSubmitter;
import org.apache.storm.generated.AlreadyAliveException;
import org.apache.storm.generated.AuthorizationException;
import org.apache.storm.generated.InvalidTopologyException;
import org.apache.storm.topology.SpoutDeclarer;
import org.apache.storm.topology.TopologyBuilder;
public class Mytopo {
public static void main(String[] args) throws InvalidTopologyException, AuthorizationException, AlreadyAliveException {
TopologyBuilder builder = new TopologyBuilder();
SpoutDeclarer aa = builder.setSpout("aa", new MySport(), 1);
builder.setBolt("bb",new Myblot(),2).setNumTasks(3)
.shuffleGrouping("aa");
Config config = new Config();
StormSubmitter.submitTopology("test",config,builder.createTopology());
}
}