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

Storm入门学习随记

时间:2016-04-09 00:08:15      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

推荐慕课网视频:http://www.imooc.com/video/10055

 

====Storm的起源。

Storm是开源的、分布式、流式计算系统

技术分享

 

什么是分布式呢?就是将一个任务拆解给多个计算机去执行,让许多机器共通完成同一个任务,

把这个多机的细节给屏蔽,对外提供同一个接口、同一个服务,这样的系统就是分布式系统。

技术分享

 

在多年以前并没有非常范用的分布式系统,即使存在,也都是限定在指定的领域,

当然,也有人尝试从中提取出共通的部分,发明一个通用的分布式系统,但是都没有很好的结果。

后来,Google发表了3篇论文,提出了分布式计算的模型,在分布式系统上有了一个质的突破。

技术分享

 

有一位大牛看了这3篇论文之后,深受启发,然后就发明了Hadoop系统。

技术分享

 

然后,基于Hadoop的改造系统就如雨后春笋一般,接二连三的出现了。

以至于,Hadoop已经不是一套软件,而是一整套生态系统了。

于是,人们谈到分布式,就必谈Hadoop了。

技术分享

 

但是,Hadoop并不是万能的,它只能处理适合进行批量计算的需求。对于,非批量的计算就不能够满足要求了。

很多时候,我们只能先收集一段时间数据,等数据收集到一定规模之后,我们才开始MapReduce处理。

 

有这么一个故事:

-------------------

路人甲是在一家媒体公司A工作,他的主要工作内容很简单,就是在一些搜索引擎上做广告,

众所周知,搜索引擎上的广告是竞价排名的,谁土豪谁就排前面,出钱少的就只能排在后面。

公司A的竞争对手都比较土豪,所以呢,公司A的广告就一直排在后面,也没什么好的办法。

后来,路人甲想出了一个馊主意,就是用程序不断的去点击竞争对手的广告,让对手的广告费

很快的花费调,这样公司A就可以廉价的将广告排在前面了。

搜索引擎公司试图识别出这些恶意点击屏来保护商家,将这些恶意点击扣除的费用返还给商家。

一般来说呢,如果利用MapReduce,一般情况下,都需要收集一段时间数据,然后根据这些

数据来算出哪些点击是恶意的,本身收集数据就已经很耗费时间了,再等计算完毕之后,

土豪商家的广告费也基本上不剩什么了。

所以呢,我们希望在点击发生的时候就算出来该点击是否是作弊行为,及时不能马上判断出,

也应该尽早的计算出来。

-------------------

 为了解决上面这个故事的需求,分布式流式计算系统就产生了,比较知名的有:

•【Yahoo】S4

•【IBM】StreamBase

•【Amazon】Kinesis

•【Spark】Streaming

•【Google】Millwheel

【Apache】Storm(目前业界中最知名、流程)

 

批量计算(以Hadoop为代表)与流式计算的区别有哪些呢?

技术分享

 

###################

目前已经有人在做一些前瞻性的项目,这些人试图将批量计算和流式计算进行整合

试图使用同一套API,即搞定流式计算,又搞定批量计算。

使一段代码不要任何改动,就可以同时执行在批量计算和流式计算两种系统之上。

这种系统目前比较有名的有:

【Twitter】Summing Bird

【Google】CloudDataflow

两个接口都已经开源了。等以后有机会一定要提前接触一下。

###################

 

====Storm组件

Storm采用的是主从结构,就是使用一台主节点来管理整个集群的运行状态。

这个主节点被称为:Nimbus,从节点用来维护每台机器的状态,被称为:Supervisor

技术分享

 

为什么采取主从结构呢?主从结构比较简单,不需要进行主节点仲裁等工作。

技术分享

 

从前面的结构图中我们还可以看出,采取主从结构之后,Nimbus是一个单点

但是,我们知道分布式领域里,大家都比较讨厌自己的系统设计中存在单点

因为单点如果发生故障,很有可能影响到整个集群的可用性。

 

所以,如果一个系统设计中如果存在单点,一般情况下这个单点的作业必然比较轻,

挂了之后,短时间之内也不影响真个系统的运行,并且一般情况下都是没有状态的,

宕机之后至需要重启就能够恢复并正确处理。

 

Nimbus的角色是只负责一些管理性的工作,它并不关心Worker之间的数据是如何传输的,

它的一些主要状态都存在分布式协调服务(Zookeeper)中,内存里面的东西都是可以丢失的

如果它挂掉,只要没有运算节点发生故障,那么整个作业还是能够正常的进行数据处理的。

Nimbus重启之后,就可以正确处理真个系统的事务了。

 

Supervisor的角色是听Nimbus的话,来启动并监控真正进行计算的Worker的进程,

如果Worker有异常,那么久帮助Worker重启一下,它也不负责数据计算和数据传输,

 

真正的数据计算和输出,都是由Worker来进行。

技术分享

 

====Storm UI

为了方便用户管理集群,查看集群运行状态,提供了一个基于Web的UI来监控整个Storm集群

它本身不是集群运行的必须部分,它的启动停止都不影响Storm的正常运行。

技术分享

 

====Storm作业提交运行流程

(1)用户使用Storm的API来编写Storm Topology。

(2)使用Storm的Client将Topology提交给Nimbus。

Nimbus收到之后,会将把这些Topology分配给足够的Supervisor。

(3)Supervisor收到这些Topoligy之后,Nimbus会指派一些Task给这些Supervisor。

(4)Nimvus会指示Supervisor为这些Task生成一些Worker。

(5)Worker来执行这些Task来完成计算任务。

 

====Storm本地模式搭建

(更新中)

 

Storm入门学习随记

标签:

原文地址:http://www.cnblogs.com/quchunhui/p/5370191.html

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