• Trident 教程


    什么是Trident?

    1、基于Storm用于实时计算的高级抽象源语;
     
    有何优势?
     
    1、支持高吞吐(每秒百万级别),有状态的流处理;
    2、提供低延时的分布式查询功能;
    3、Trident具有连接、聚合、分组、自定义行为和过滤的功能;
    4、基于内存或数据库做有状态的增量式的计算;
    5、能够保证每个Tuple严格只被执行一次
    6、构建Topology简单;
     
    例子:统计各个单词出现的次数
     
    Spout
     
    用于接收外部数据,转化为Tuple;
     
    package trident.test.demo2;
    
    import backtype.storm.Config;
    import backtype.storm.task.TopologyContext;
    import backtype.storm.tuple.Fields;
    
    import backtype.storm.tuple.Values;
    import storm.trident.operation.TridentCollector;
    import storm.trident.spout.IBatchSpout;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    
    
    /**
     * User: jianwl
     * Date: 2016/2/24
     * Time: 16:12
     */
    public class TridentSpoutDemo implements IBatchSpout{
        private static final List<String> sentences = Arrays.asList(
                "the cow jumped over the moon",
                "the man went to the store and bought some candy",
                "four score and seven years ago");
    
        private boolean complete =  false;
    
        @Override
        public void open(Map map, TopologyContext topologyContext) {
            // nothing do
        }
    
        @Override
        public void emitBatch(long l, TridentCollector tridentCollector) {
            if(complete){
                return;
            }
            for(int i=0; i< sentences.size() ; i++){
                tridentCollector.emit(new Values(sentences.get(i)));
            }
            complete = true;
        }
    
        @Override
        public void ack(long l) {
            // nothing do
        }
    
        @Override
        public void close() {
            // nothing do
        }
    
        @Override
        public Map getComponentConfiguration() {
            return new Config();
        }
    
        @Override
        public Fields getOutputFields() {
            return new Fields("sentence");
        }
    }

    创建Topology

    public class TridentTopo {
        public static void main(String[] args) {
            TridentTopology topology = new TridentTopology();
            topology.newStream("spout", new TridentSpoutDemo())
                    .each(new Fields("sentence"), new Split(), new Fields("word"))
                    .each(new Fields("word"), new PrintFunction(),new Fields("field","count"));
    
            Config config = new Config();
            LocalCluster localCluster = new LocalCluster();
            localCluster.submitTopology("trident-demo2", config, topology.build());
        }
    }

    public class Split extends BaseFunction {
    public Split() {
    }

    public void execute(TridentTuple tuple, TridentCollector collector) {
    String[] arr$ = tuple.getString(0).split(" ");
    int len$ = arr$.length;

    for(int i$ = 0; i$ < len$; ++i$) {
    String word = arr$[i$];
    if(word.length() > 0) {
    collector.emit(new Values(new Object[]{word}));
    }
    }
    }
    }


    public class PrintFunction extends BaseFunction {
    private final static Map<String,Integer> map = new HashMap<>();
    @Override
    public void execute(TridentTuple tridentTuple, TridentCollector tridentCollector) {
    String input = tridentTuple.getString(0);
    if(!map.containsKey(input)){
    map.put(input,1);
    }else{
    int count = map.get(input) + 1;
    map.put(input,count);
    }
    System.out.println("result ==> "+map);
    }
    }
     
  • 相关阅读:
    pscp 从win10远程传输文件到centos7,多个虚拟机之间传文件
    Spring Aop中四个重要概念,切点,切面,连接点,通知
    查看Java的汇编指令
    Spring集成GuavaCache实现本地缓存
    RocketMq消息 demo
    使用axis1.4生成webservice的客户端代码
    oracle ORA-00060死锁查询、表空间扩容
    mysql 1449 : The user specified as a definer ('usertest'@'%') does not exist 解决方法 (grant 授予权限)
    软件安装
    动态雪花飘落
  • 原文地址:https://www.cnblogs.com/liuyunAlex/p/5213715.html
Copyright © 2020-2023  润新知