Storm笔记

Hadoop与storm对比:

Hadoop:

1) 优点:吞吐量大,自动容错,在海量数据处理上得到广泛应用。

2) 缺点:不擅长实时计算,天然为批处理而生,高延迟,响应缓慢,运维复杂。

Storm:

1)优点:低延迟,高性能,分布式,运维简单,可扩展,高度容错(一个节点挂了,不能影响整体应用) ,无数据丢失,  消息不丢失   容易在上面开发应用程序

多语言(提交部分还是要用Java实现)

 

Mapreduce:

      坏处:慢

      好处:稳定

 

数据来源:

   hadoop:HDFS的T级别或者是PB级别的海量数据(历史数据)

   Storm:实时新增的某一笔数据(实时的数据)一般跟kafka做对接

 

处理过程:

   hadoop(Mapreduce):

          map阶段   -》  reduce阶段

   Storm  Spout(数据源)  Bolt(处理逻辑)

是否有结束:

   hadoop:无论如何最后还是有结束的

   Storm:在不出错误的情况下,是没有结束的

 

处理速度:

   hadoop:设计的目标就是为了处理海量数据的(TB级,PB级的数据)

           处理数据速度较慢

   Storm:为了处理某一笔新增的数据,所以可以做到很快就处理完。

 

应用场景:

   hadoop:不讲究时效性的项目上面

   Storm:只需要处理新增数据,需要讲究时效性!!

 

 ===================================================

  Mapreduce1:

      Jobtracker

      TaskTracker

 

Hadoop中MapReduce两种组件:

Mapreduce1:

      用来处理批处理作业的

      有一个主节点叫Jobtracker,从节点叫TaskTracker

      我们提交任务提交给Jobtracker,Jobtracker把任务分配给TaskTracker

      提交任务的交Job

      任务运行的时候,任务类型有map 任务和reduce任务

Storm:

      用来处理实时作业的

      有一个主节点叫Nimbus, 从节点叫Supervisor  这两种组件没有状态,nimbus把任务状态和心跳信息都保存在zookeeper上,提交的代码资源都在本地机器的硬盘上。

 

storm的架构:

  是主从式的架构,主节点叫Nimbus,从节点叫Supervisor

  nimbus  和 Supervisor之间是不直接进行沟通联系的。

  Nimbus:

     1) 提交任务提交给Nimbus,Nimbus要把这些任务分配给

         Supervisor。Nimbus 把任务信息发送到zookeeper的znode上。

         Supervisor是通过去监控相对应的znode节点的信息

 

    2)通过去监控zookeeper的某个znode,就知道整个集群Supervisor的情况。

  Supervisor:

     1)启动了以后去zookeeper上去注册。把信息写到某个znode上。

     2)获取到任务情况,去运行程序。

      

  zookeeper:

     在nimbus 和  Supervisor 之间协调。

 

     这种架构模式,值得我们借鉴!!

 

Nimbus负责在集群里发送代码,分配工作给机器,并且监控状态。全局只有一个。

Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程Worker。每一个要运行storm的机器上都要部署一个,并且机器的配置设定上面分配的槽位数。 Zookeeper是storm重点依赖的外部资源。Nimbus和supervisor甚至实际运行的Worker都是把心跳保存在zookeeper上的。Nimbus也是根据zookeeper上的心跳和认为运行状况,进行调度和任务分配的。

      我们提交任务提交给Nimbus,Nimbus把任务分配给Supervisor

      提交的任务叫topology

      任务运行的时候,任务类型有spout任务和bolt任务。

Topology处理的最小的消息单位是一个Tuple,也就是一个任意对象的数组。

·        Topology由Spout和Bolt构成。Spout是发出Tuple的结点。Bolt可以随意订阅某个Spout或者Bolt发出的Tuple。Spout和Bolt都统称为component。

Nimbus只有一个(JStorm  ninmbus HA)

 

Topology的提交流程图:


  Storm数据交互图:可以看出两个模块Nimbus和Supervisor之间没有直接交互。状态都是保存在Zookeeper上。Worker之间通过ZeroMQ传送数据。

有些地方做得还是不太好,例如,底层使用的ZeroMQ不能控制内存使用(下个release版本,引入了新的消息机制使用netty代替ZeroMQ),多语言支持更多是噱头,Nimbus还不支持HA。但是,就像当年的Hadoop那样,很多公司选择它是因为它是唯一的选择。而这些先期使用者,反过来促进了Storm的发展。

我们只需要实现每个分析的过程,而Storm帮我们把消息的传送和接受都完成了。更加激动人心的是,你只需要增加某个Bolt的并行度就能够解决掉某个结点上的性能瓶颈。

需要知道Storm不是一个完整的解决方案。使用Storm你需要加入消息队列做数据入口,考虑如何在流中保存状态,考虑怎样将大问题用分布式去解决。解决这些问题的成本可能比增加一个服务器的成本还高。但是,一旦下定决定使用了Storm并解决了那些恼人的细节,你就能享受到Storm给你带来的简单,可拓展等优势了。

 

Supervisor默认端口号为4个   可以提供4份slot资源   跟CPU核数一样