zoukankan      html  css  js  c++  java
  • 一 Storm 基础

     1  Storm 分布式计算结构称为 Topology (拓扑)
            Topology 由 stream(数据流)。spout(数据流的生成者)。bolt(运算)组成。
            1.1    stream
                        Strom 核心数据结构是 tuple。 tuple/英译 元组,重数/
            1.2    spout
                        spout 代表了一个 Storm Topology 的数据入口,充当采集器角色。连接到数据源,
                        并 将 tuple 作为数据流进行发射
                        { “sentence”:“My dog is called  'cow cow' ”}
                        spout 将会一直循环发送 tuple。 一般spout 会连接到动态数据源上。
            1.3    bolt
                        可以理解为程序中的运算或函数,将一个或多个数据流作为输入,对数据事实运算后,选择输出一个或者多个数据流。bolt 可以订阅多个 spot 或者其他 bolt 发射的数据流,这样可以建立复杂的数据流转换网络。
                     bolt 典型功能 过滤 tuple 连接和聚合操作。 计算。数据库读写。

            单词计数 topology 数据流。
                    


            1.2.1 语句分割 bolt
                    语句分割 bolt (SplitSentenceBolt)类将会订阅 sentence spout 发射的 tuple 流,每当受到一个 tuple,bolt 会获取“sentence”对应值域的语句,然后将语句分割为一个个的单词。 每个单词向后发射一个 tuple:
            1.2.2 单词计数 bolt
                    单词计数 bolt (WordCountBolt)订阅 SplitSentenceBolt 类的输出,保存每个特定单词出现的次数。每当 bolt 接收到一个 tuple,会将对应单词的计数加一,并且向后发送该单词当前的计数。
            1.2.3 上报 bolt
                    上报 bolt 订阅 WordCountBolt 类的输出, 像WordCountBolt 一样,维护一份所有单词对应的计数的表。当接受到一个 tuple 时,上报 bolt 会更新表中的计数数据,并且将值在终端打印。

            数据源         数据源继承 BaseRichSpout
            实现            实现继承 BaseRichBolt
            Topology:    WordCountTopology
            


    一个 Strom 程序编写
     
    public class WordCountTopology {
        private static final String SENTENCE_SPOUT_ID = "sentence-spout";
        private static final String SPLIT_BOLT_ID = "split-bolt";
        private static final String COUNT_BOLT_ID = "count-bolt";
        private static final String REPORT_BOLT_ID = "report-bolt";
        private static final String TOPOLOGY_NAME = "word-count-topology";
        public static void main(String[] args) throws Exception {
    // 1    首先编写 spout 和 bolt 
            SentenceSpout spout = new SentenceSpout();
            SplitSentenceBolt splitBolt = new SplitSentenceBolt();
            WordCountBolt countBolt = new WordCountBolt();
            ReportBolt reportBolt = new ReportBolt();
    // 2   生成一个 TopologyBuilder 实例
            TopologyBuilder builder = new TopologyBuilder();
            /** 注册一个 sentence spout 并复制给其唯一的 ID */
            // 2 参数为单个。  三个参数可以分配 多个 task
            builder.setSpout(SENTENCE_SPOUT_ID, spout);
            /**
             * TopologyBuilder 的 setBolt() 方法会注册一个 bolt, 并且返回 BoltDeclarer 的实例,可以定义 bolt 的数据源。
             * 注册一个 SplitSentenceBolt,这个 bolt 订阅 SentenceSpout发射出来的数据流
             */
            builder.setBolt(SPLIT_BOLT_ID, splitBolt).shuffleGrouping(SENTENCE_SPOUT_ID);
            builder.setBolt(COUNT_BOLT_ID, countBolt).fieldsGrouping(SPLIT_BOLT_IDnew Fields("word"));
            builder.setBolt(REPORT_BOLT_ID, reportBolt).globalGrouping(COUNT_BOLT_ID);
            /**
             * 所有数据流都应经定义好,运行单词计数计算最后一步名编译并提交到集群上。
             *
             * 本地模式 。 模拟集群。  可以设置断电,暂停运行,观察变量,分析程序性能。当 topology 发布到分布式集群后。将很难做到。
             * 当一个 Topology 提交时,Storm 会将默认配置 和 Config 实例中的配置合并后作为参数传递给 submitTopology()方法。
             * 合并后的配置分发给各个 spout 的 bolt 的 open()、prepare()方法。
             * 
             * waitForSeconds(10) 停10秒。
             * cluster.killTopology(TOPOLOGY_NAME); 停止/卸载 该 topology,最后关闭本地模式集群。
             * 执行完毕后 出 --final counts--
             */
            Config config = new Config();
            // 以后会用到  config.setNumWorkers(2);// 分配 Topology 两个 worker
            LocalCluster cluster = new LocalCluster();
            cluster.submitTopology(TOPOLOGY_NAME, config, builder.createTopology());
            Utils.sleep(10000); 
            cluster.killTopology(TOPOLOGY_NAME);
            cluster.shutdown();
        }  
    } 


















                                                                                                                            God has given me a gift. Only one. I am the most complete fighter in the world. My whole life, I have trained. I must prove I am worthy of someting.                                                             rocky_24












    God has given me a gift. Only one. I am the most complete fighter in the world. My whole life, I have trained. I must prove I am worthy of someting. rocky_24
  • 相关阅读:
    Redis 配置为 Service 系统服务
    java.lang.IllegalStateException: The platform metadata area could not be written
    SpringCloud Gateway做熔断降级+限流
    Mac mysql修改my.cnf不起作用排查
    MailHealthIndicator javax.mail.MessagingException: Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 25, response: -1
    Spring Cloud Gateway跨域配置
    一、Rancher单机搭建
    SpringCloud快速搭建微服务
    在Mac下为GUI程序设定环境变量
    Spring cache 使用说明
  • 原文地址:https://www.cnblogs.com/rocky24/p/bdcd7dc672c594eabf8b29548bb3e951.html
Copyright © 2011-2022 走看看