码迷,mamicode.com
首页 > 其他好文 > 详细

1. Storm介绍

时间:2015-06-13 01:05:37      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

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。
 

 

 

 

1. Storm介绍

标签:

原文地址:http://www.cnblogs.com/51runsky/p/4572815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!