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. PHP下的异步尝试二:初识协程

    PHP下的异步尝试系列 如果你还不太了解PHP下的生成器,你可以根据下面目录翻阅 PHP下的异步尝试一:初识生成器 PHP下的异步尝试二:初识协程 PHP下的异步尝试三:协程的PHP版thunkify ...

  2. (转)C++引用

    前言:引用是C++一个很重要的特性,最近看了很多有关引用的资料和博客,故在此对引用的相关知识进行总结 一.什么是引用 引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作 ...

  3. ASP.NET-AuthorizeAttribute做身份验证操作

    代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走H ...

  4. 兴趣爱好-QQ的本地共享

    QQ这个本地共享简直了,不就实现了公网FTP的功能么?好方便啊,有啥文件共享给好友就直接放在本地就可以了,真好用

  5. spring-boot-maven-plugin 插件的作用(转)

    OM 文件中添加了“org.springframework.boot:spring-boot-maven-plugin”插件.在添加了该插件之后,当运行“mvn package”进行打包时,会打包成一 ...

  6. 玩转oracle学习第六天

     1.上节回想 2.PL/SQL的介绍 3.PL/SQL的基础 理解oracle的pl/sql概念 掌握PL/SQL编程技术(包含编写过程,函数,触发器.包... ) PL/SQL是什么? PL/ ...

  7. EditText电话号码格式化输入、删除案例

    我们在输入电话号码的时候,一般都会切割一个较长的电话号码.这种话效果会好非常多..对EditText的监听能够轻松的实现这个需求.仅仅须要我们给相应的EditText加一个监听就OK了..贴一下我写的 ...

  8. Android LaunchMode案例篇

    首先感谢小伙伴的关注.然后祝愿广大的情侣们节日快乐! 在开发中有时会遇到这种场景,用户点击注冊.第一步,第二步,完毕注冊跳转到登录界面,不须要用户一步一步的返回到登录界面.这是怎么实现的呢? 案例:有 ...

  9. poj--2549--Sumsets(二分查找)

    Sumsets Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  10. [Codeforces 911F] Tree Destruction 解题报告(贪心)

    题目链接: http://codeforces.com/contest/911/problem/F 题目大意: 给你一棵树,每次挑选这棵树的两个度数为1的点,加上他们之间的边数(距离),然后将其中一个 ...