zoukankan      html  css  js  c++  java
  • Storm的基本知识

             上篇文章本人简单的介绍了Storm的起源,今天本人又继续学习了Storm的基本的一些知识,基本了解了他的基本用法,还好,不算太难,如果大家了解了Hadoop的MapReduce模型的话,看这个也是非常类似的。在了解Storm的原型时,首先了解一些概念。

    1.Tuple(元组),作为消息传递的基本单元,元组中的字段可以是任何类型的对象。元组会用于后面提到的Bolt方法的execute方法。

    2.Spout(喷口),是拓扑的流的来源,就是产生源数据流的组件。喷口的数据来源可以有几种方式。(1).直接连接数据源 (2).从消息队列中读取消息 (3).通过DRPC的形式,简单的说,Spout相当于Hadoop中的Map。

    3.Bolt(螺栓),在拓扑中处理所有的逻辑。在Bolt中可以完成连接运算,统计分析,等等各种逻辑操作。执行的方法就是刚刚说的那个execute()方法。

    4.Topology(拓扑),是Storm中运行的一个实时应用程序,一个完整的Spout--Bolt就是在一个Topology中执行的。Storm中的拓扑相当于Hadoop中的作业job,在MapReduce的作业会最终完成,而一个拓扑会永远运行直到他被杀死。在java里,用的是TopologyBuilder来构建拓扑。

    5.Nimbus进程与Supervisor进程。主控结点运行Nimbus的守护进程。负责分配节点任务,并监视主机故障,类似Hadoop的jobTracker。每个工作节点运行的是Supervisor守护进程,监听主机上的已经分配好的作业。

    6.Worker(工作进程),Task(任务),Executor(执行器),三者的关系非常相近,用一张图表示直接明了。这3个关系的在一定程度上也控制着Storm拓扑的并行度。在一个节点中可以有1个或多个工作进程运行在1个或多个拓扑中。


    ,所以这也表明了在Storm可以并行执行任务。下面给出一个非常简单的拓扑的例子:

    public class SimpleTopology {
        public static void main(String[] args) {
            try {
                // 实例化TopologyBuilder类。
                TopologyBuilder topologyBuilder = new TopologyBuilder();
                // 设置喷发节点并分配并发数,该并发数将会控制该对象在集群中的线程数。
                topologyBuilder.setSpout("SimpleSpout", new SimpleSpout(), 1);
                // 设置数据处理节点并分配并发数。指定该节点接收喷发节点的策略为随机方式。
                topologyBuilder.setBolt("SimpleBolt", new SimpleBolt(), 3).shuffleGrouping("SimpleSpout");
                Config config = new Config();
                config.setDebug(true);
                if (args != null && args.length > 0) {
                    config.setNumWorkers(1);
                    StormSubmitter.submitTopology(args[0], config, topologyBuilder.createTopology());
                } else {
                    // 这里是本地模式下运行的启动代码。
                    config.setMaxTaskParallelism(1);
                    LocalCluster cluster = new LocalCluster();
                    cluster.submitTopology("simple", config, topologyBuilder.createTopology());
                }
                
            } catch (Exception e) {
                e.printStackTrace(); 
            }
        }
    }

    上面的例子给出了本地测试模式和正式开发模式的的拓扑提交例子。为了比较Hadoop和Storm的区别。我做了表格:

    对比项                        Hadoop                       Storm

    系统角色                    JobTracker                  Nimbus

                                        TaskTracker                Supervisor

    应用名称                     Job                              Topology

    组件接口                     Map/Reduce              Spout/Bolt

    以上就是个人在最近一段时间学习Storm的一点小小总结

  • 相关阅读:
    Java实现 LeetCode 792 自定义字符串排序(暴力)
    Java实现 LeetCode 792 自定义字符串排序(暴力)
    asp.net session对象的持久化
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 791 自定义字符串排序(桶排序)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
    小白也能看懂的约瑟夫环问题
  • 原文地址:https://www.cnblogs.com/bianqi/p/12184249.html
Copyright © 2011-2022 走看看