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的一点小小总结

  • 相关阅读:
    JNI在C 和 C++ 函数实现的不同
    JNI输出log信息
    Android.mk相关知识
    Android项目编译和使用C语言动态库(so库)
    Jmeter之JDBC请求(四)
    Jmeter之Badboy录制脚本及简化脚本http请求(三)
    Jmeter之录制脚本(二)
    Android自动化压力测试之Monkey Test 异常解读(五)
    Android自动化压力测试之Monkey Test Android常见的错误类型及黑白名单的使用方法(四)
    Android自动化压力测试之Monkey Test (三)
  • 原文地址:https://www.cnblogs.com/bianqi/p/12184250.html
Copyright © 2011-2022 走看看