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_ID, new 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









一 Storm 基础的更多相关文章

  1. Storm基础

    Storm基本概念 Storm是一个开源的实时计算系统,它提供了一系列的基本元素用于进行计算:Topology.Stream.Spout.Bolt等等. 在Storm中,一个实时应用的计算任务被打包作 ...

  2. storm基础系列之一----storm并发度概念剖析

    前言: 学了几天storm的基础,发现如果有hadoop基础,再理解起概念来,容易的多.不过,涉及到一些独有的东西,如调度,如并发度,还是很麻烦.那么,从这一篇开始,力争清晰的梳理这些知识. 在正式学 ...

  3. storm基础框架分析

    背景 前期收到的问题: 1.在Topology中我们可以指定spout.bolt的并行度,在提交Topology时Storm如何将spout.bolt自动发布到每个服务器并且控制服务的CPU.磁盘等资 ...

  4. Storm基础概念与单词统计示例

    Storm基本概念 Storm是一个分布式的.可靠地.容错的数据流处理系统.Storm分布式计算结构称为Topology(拓扑)结构,顾名思义,与拓扑图十分类似.该拓扑图主要由数据流Stream.数据 ...

  5. storm基础系列之二----zookeeper的作用

    在storm集群中,我们常常使用zookeeper作为协调者.那么具体发挥的是什么作用呢? 概括来说,zookeeper是nimbus和supervisor进行交互的中介.具体来说有二: 1.nimb ...

  6. Storm 基础知识

    分布式的实时计算框架,storm对于实时计算的意义类似于hadoop对于批处理的意义. Storm的适用场景: 1.流数据处理:storm可以用来处理流式数据,处理之后将结果写到某个存入中去. 2.持 ...

  7. storm - 基础概念整理

    理论 Hadoop的出现虽然为大数据计算提供了一条捷径,但其仍然存在自身难以克服的缺点:实时性不足.Hadoop的一轮计算的启动需要较长时间,因此其满足不了对实时性有较高要求的场景. Storm由此应 ...

  8. Storm基础知识

    上一篇文章我们介绍一个简单的Storm起源,今天我去学习Storm一些主要的知识,他的基本使用基本的了解.幸运的是,,不是太困难,假设我们理解Hadoop的MapReduce模型的话.看这个也是很类似 ...

  9. 【Storm篇】--Storm基础概念

    一.前述 Storm是个实时的.分布式以及具备高容错的计算系统,Storm进程常驻内存 ,Storm数据不经过磁盘,在内存中处理. 二.相关概念 1.异步: 流式处理(异步)客户端提交数据进行结算,并 ...

  10. Hadoop之Storm基础

    1.离线计算是什么 离线计算:批量获取数据,批量传输数据,周期性批量计算数据,数据展示 代表技术:sqoop批量导入数据,hdfs批量存储数据,mapreduce批量计算数据,hive批量计算数据,* ...

随机推荐

  1. centos7下部署Redis

    1.1. Redis的安装 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 安装步骤: 第一步:redis的源码包上 ...

  2. C# .net IDE Rider入门

    话说史上最强IDE Visual Studio 所向披靡数十载尚无敌手,现在Intellij带着统一IDE界的目标来挑战VS的霸主地位.了解Rider后发现,哎哟亮点多多,还不错哦! Rider是一款 ...

  3. Ubuntu 15.10 安装Qt5.5.1

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50300447 本人使用的ubuntu系 ...

  4. [AngularJS]Chapter 3 使用AngularJS构建应用程序

    本章内容提要: 如何布置AngularJS进行快速开发 开启服务器进行测试 使用Karma进行单元测试用例测试 编译压缩AngularJS进行生产 使用Batarang进行Debug 如何简化开发工作 ...

  5. JavaScript正則表達式知识汇总

    Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegE ...

  6. POJ 1942

    开始时竟然用了分情况讨论. 仔细思考一下,哈哈,发现不过是多重集合的组合数而已. #include <iostream> #include <cstdio> #include ...

  7. 【转载】SQLITE3 使用总结

    转载自网友董淳光的文章. 前序: 这里要注明,我是一个跨平台专注者,并不喜欢只用 windows 平台.我以前的工作就是为 unix 平台写代码.下面我所写的东西,虽然没有验证,但是我已尽量不使用任何 ...

  8. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER

    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER ...

  9. [ES2018] Two ways to write for-await-of

    // Asynchronous iteration --> Symbol.asyncIterator async function main() { const syncIterable = [ ...

  10. 2014年辛星解读css第三节

    第二节我们讲述的差点儿全是CSS的选择器,那么以下这一节我们来讲一下CSS的颜色和文本的一些东西,尽管我对调色不大敏感.可是对于颜色还是比較感兴趣的. *********CSS中的颜色******** ...