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. 一般树--common tree

    参照libyang中的lyd_tree的组织结构,写了一套通用树接口. github 的地址:https://github.com/HellsingAshen/mytc/tree/master/tc_ ...

  2. django-10-中间件和上下文管理器

    <<<中间件的引入>>> 用户<->中间件<->url->视图  在app目录里面 middleware.py  (1)中间件就是一个 ...

  3. [luogu] P3745 [六省联考2017]期末考试 (贪心)

    P3745 [六省联考2017]期末考试 题目描述 有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布. 第 \(i\) 位同学希望在第 \(t_i ...

  4. Linux内核源码情景分析-wait()、schedule()

    父进程执行wait4,并调用schedule切换到子进程: wait4(child, NULL, 0, NULL); 像其它系统调用一样.wait4()在内核中的入口是sys_wait4().代码例如 ...

  5. YAML说明

    YAML说明 https://www.cnblogs.com/songchaoke/p/3376323.html XML的简化

  6. I hate it (线段树)

    B - I Hate It Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submi ...

  7. 每一个JavaScript开发者都应该知道的10道面试题

    JavaScript十分特别.而且差点儿在每一个大型应用中起着至关关键的数据.那么,究竟是什么使JavaScript显得与众不同,意义非凡? 这里有一些问题将帮助你了解其真正的奥妙所在:   1.你能 ...

  8. vue 路由demo2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. node--19 moogose demo1

    db.js /** * Created by Danny on 2015/9/28 16:44. */ //引包 var mongoose = require('mongoose'); //创建数据库 ...

  10. bzoj1066: [SCOI2007]蜥蜴(最大流)

    1066: [SCOI2007]蜥蜴 题目:传送门 题解: 哇QTT大佬一眼秒算法...ORT 其实很容易就可以看出来是一道最大流 因为有边的使用限制,那么就可以直接当成是流量来处理嘛 因为是对点进行 ...