博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1. Storm介绍
阅读量:5371 次
发布时间:2019-06-15

本文共 2093 字,大约阅读时间需要 6 分钟。

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

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。
 

 

 

 

转载于:https://www.cnblogs.com/51runsky/p/4572815.html

你可能感兴趣的文章
Ps切图学习
查看>>
前端不要性无能
查看>>
转 字符串处理函数(不使用库函数实现)
查看>>
思维导图
查看>>
jmeter单sql语句测试
查看>>
echarts区域统计取消选框事件
查看>>
使用IntelliJ IDEA的小技巧快乐编程(2)
查看>>
Java8的lambda表达式和Stream API
查看>>
hdu 5363 组合数学 快速幂
查看>>
Python基本数据类型(练习题)
查看>>
javascript 中{}和[] 的理解
查看>>
jexus独立版设置支持https
查看>>
文本框input:text
查看>>
[04] 包和访问权限修饰符
查看>>
约瑟夫环
查看>>
Cache 基于SQL 数据库 的缓存依赖 轮询机制详解
查看>>
模板方法模式
查看>>
初步认识dubbo--小案例
查看>>
map插入与查找
查看>>
添加数据库补丁
查看>>