ucyuujin 2018-11-30 03:07
浏览 337

storm的executor、task、spout、bolt的关系

  public static class WordCountBolt extends BaseRichBolt{
        OutputCollector _collector;
        Map<String, Integer> counts = new HashMap<>();

        @Override
        public void prepare(Map conf,TopologyContext context,OutputCollector collector){
            _collector=collector;
        }

        @Override
        public void execute(Tuple input){
            // 接收一个单词
            String word = input.getString(0);
            // 获取该单词对应的计数
            Integer count = counts.get(word);

            // 计数增加
            if(count == null) {
                count = 0;
            } else {
                count++;
            }

            // 将单词和对应的计数加入map中
            counts.put(word, count);
            System.out.println(word + ":" + count);

            // 发送单词和计数(分别对应字段word和count)
            _collector.emit(new Values(word, count));
        }

        @Override
        public void declareOutputFields(OutputFieldsDeclarer declarer){
            // 定义一个字段
            declarer.declare(new Fields("word","count"));
        }
    }

    /**
     * 主函数,创建topology
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception{
        //创建一个Topology
        TopologyBuilder builder=new TopologyBuilder();
        // 设置Spout,这个Spout的名字叫做"Spout",设置并行度为5
        builder.setSpout("spout", new WordCountSpout(), 5);
        // 设置分词Bolt,并行度为8,它的数据来源是spout的
        builder.setBolt("split", new WordSplitBolt(), 8).shuffleGrouping("spout");
        // 设置计数Bolt,你并行度为12,它的数据来源是split的word字段
        builder.setBolt("count", new WordCountBolt(), 12).fieldsGrouping("split", new Fields("word"));

        Config conf = new Config();
        conf.setDebug(false);

        conf.setNumWorkers(3);
        StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
    }

spout和bolt的executor设置为5,task为10,那实际运行的时候,它是会产生多少个实例?
如果是多例的话,在WordCountBolt中的成员变量counts不是会发生并发问题吗?

  • 写回答

0条回答

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 SQL 表中 考勤记录的组合查询
      • ¥15 Power pivot无法刷新数据
      • ¥15 刚入职被要求写这种文档,应该如何下手
      • ¥15 最优经济尺寸设计问题
      • ¥15 从多元正态分布中生成3维样本
      • ¥15 GEO下载数据的处理报错 :函数‘Meta’标签‘"data.frame"’找不到继承方法,如何解决?
      • ¥15 android object box 一个实体多个表怎么写
      • ¥15 temux 启用docker 服务失败
      • ¥15 Flask 使用celery发送邮件出现‘目标计算机积极拒绝‘
      • ¥15 超时跳出方法代码的返回值问题