• 1. Storm介绍


    Storm 是Twitter的一个开源框架。Storm一个分布式的、容错的实时计算系统。  官网:http://storm.apache.org/

    Twitter Storm集群表面上类似于Hadoop集群,Hadoop上运行的是MapReduce Jobs,而Storm运行topologies;但是其本身有很大的区别,最主要的区别在于,Hadoop MapReduce Job运行最终会完结,而Storm topologies处理数据进程理论上是永久存活的,除非你将其Kill掉。
     
    1. Storm集群中包含两类节点:主控节点(Master Node)工作节点(Work Node)。其分别对应的角色如下:
        1).Nimbus (Master Node)
        负责在Storm集群内分发代码,分配任务给工作机器,并且负责监控集群运行状态;Nimbus的作用类似于Hadoop中JobTracker。
        2). Supervisor(Work Node)
        Supervisor负责监听从Nimbus分配给它执行的任务,据此启动或停止执行任务的工作进程(worker)。
     
       
     
      3).Nimbus和Supervisor节点之间所有的协调工作是通过Zookeeper集群来实现的
    •      Nimbus和Supervisor进程都是快速失败(fail-fast)和无状态(stateless)的;
    •      Storm集群所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。
         这意味着你可以用kill -9来杀死Nimbus和Supervisor进程,它们在重启后可以继续工作。这个设计使得Storm集群拥有不可思议的稳定性。
     
    2. Storm集群上要实现实时计算,需要创建Topologies
        运行一个Topology比较简单,首先,你打包所有的代码和依赖关系的包打成一个jar包。然后,运行如下命令:
    1. 1 storm jar all-my-code.jar backtype.storm.MyTopology arg1 arg2 
      2  
      3 //这里运行一个包含arg1和arg2两个参数的backtype.storm.MyTopology类,main方法定义Topology以及提交到Nimbus,storm jar部分连接Nimbus以及上传jar包到集群.
      4  
      5 storm kill {stormname}    //To kill a topology
      Storm的主要特点如下:
    •  简单的编程模型。类似于Mapreduce降低了并行批处理复杂性,Storm降低了进行实时处理的复杂性。
    •  可以使用各种编程语言。你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要增加对其他语言的支持,只需实现一个简单的Storm通信协议即可。
    • 容错性。Storm会管理工作进程和节点的故障。
    • 水平扩展。计算是在多个线程、进程和服务器之间并行进行的。
    • 可靠的消息处理。Storm保证每个消息至少能得到一次完整处理。任务失败时,它会负责从消息源重试消息。
    • 快速。系统的设计保证了消息能得到快速的处理,使用ZeroMQ作为其用底层消息队列。
    • 本地模式。Storm有一个“本地模式”,可以在处理过程中完全模拟Storm集群。这让你可以快速进行开发和单元测试。
      Storm的术语:
         Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology 
    • Stream是被处理的数据。
    • Sprout是数据源。
    • Bolt处理数据。
    • Task是运行于Spout或Bolt中的线程
    • Worker是运行这些线程的进程
    • Stream Grouping规定了Bolt接收什么东西作为输入数据。
    • 数据可以随机分配(术语为Shuffle),或者根据字段值分配(术语为Fields),或者 广播(术语为All),或者总是发给一个Task(术语为Global),也可以不关心该数据(术语为None),或者由自定义逻辑来决定(术语为 Direct)。
    • Topology是由Stream Grouping连接起来的Spout和Bolt节点网络。
         
     
      worker 
    • Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程,这个工作进程就是worker
    • 每一个worker都会占用工作节点的一个端口,这个端口可以在storm.yarm中配置
    • 一个topology可能会在一个或者多个工作进程里面执行,每个工作进程执行整个topology的一部分,所以一个运行的topology由运行在很多机器上的很多工作进程组成。
      Task  
    • 每一个Spout和Bolt会被当作很多task在整个集群里面执行。
    • 默认情况下每一个task对应到一个线程(Executor),这个线程用来执行这个task,
    • stream grouping则是定义怎么从一堆task发射tuple到另外一堆task。
     
     
    将来的你,一定会感谢现在拼命努力的你。
  • 相关阅读:
    instanceof方法
    Java 实现接口计算圆柱的体积和面积并添加颜色
    Java代码执行顺序
    Java饿汉单例模式
    斐波那契数(动态规划和递归)
    Java 接口实现计算器加减乘除(字符交互界面)
    局部内部类详解_转载
    Java引用类型
    递归打印字符串
    时间复杂度
  • 原文地址:https://www.cnblogs.com/51runsky/p/4572815.html
Copyright © 2020-2023  润新知