使用Storm实现实时大数据分析.docx
- 文档编号:2236795
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:27
- 大小:457.44KB
使用Storm实现实时大数据分析.docx
《使用Storm实现实时大数据分析.docx》由会员分享,可在线阅读,更多相关《使用Storm实现实时大数据分析.docx(27页珍藏版)》请在冰豆网上搜索。
使用Storm实现实时大数据分析
使用Storm实现实时大数据分析
分类:
数据结构与算法 大数据处理2012-12-3110:
12 23794人阅读 评论(10) 收藏 举报
hadoopstorm
目录(?
)[+]
摘要:
随着数据体积的越来越大,实时处理成为了许多机构需要面对的首要挑战。
ShruthiKumar和SiddharthPatankar在Dr.Dobb’s上结合了汽车超速监视,为我们演示了使用Storm进行实时大数据分析。
CSDN在此编译、整理。
简单和明了,Storm让大数据分析变得轻松加愉快。
当今世界,公司的日常运营经常会生成TB级别的数据。
数据来源囊括了互联网装置可以捕获的任何类型数据,网站、社交媒体、交易型商业数据以及其它商业环境中创建的数据。
考虑到数据的生成量,实时处理成为了许多机构需要面对的首要挑战。
我们经常用的一个非常有效的开源实时计算工具就是Storm ——Twitter开发,通常被比作“实时的Hadoop”。
然而Storm远比Hadoop来的简单,因为用它处理大数据不会带来新老技术的交替。
ShruthiKumar、SiddharthPatankar共同效力于Infosys,分别从事技术分析和研发工作。
本文详述了Storm的使用方法,例子中的项目名称为“超速报警系统(SpeedingAlertSystem)”。
我们想实现的功能是:
实时分析过往车辆的数据,一旦车辆数据超过预设的临界值——便触发一个trigger并把相关的数据存入数据库。
1. Storm是什么
全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上得到了广泛的使用。
Hadoop下的Map/Reduce框架对于数据的处理流程是:
1、将要处理的数据上传到Hadoop的文件系统HDFS中。
2、Map阶段
a) Master对Map的预处理:
对于大量的数据进行切分,划分为M个16~64M的数据分片(可通过参数自定义分片大小)
b) 调用Mapper函数:
Master为Worker分配Map任务,每个分片都对应一个Worker进行处理。
各个Worker读取并调用用户定义的Mapper函数 处理数据,并将结果存入HDFS,返回存储位置给Master。
一个Worker在Map阶段完成时,在HDFS中,生成一个排好序的Key-values组成的文件。
并将位置信息汇报给Master。
3、Reduce阶段
a) Master对Reduce的预处理:
Master为Worker分配Reduce任务,他会将所有Mapper产生的数据进行映射,将相同key的任务分配给某个Worker。
b) 调用Reduce函数:
各个Worker将分配到的数据集进行排序(使用工具类Merg),并调用用户自定义的Reduce函数,并将结果写入HDFS。
每个Worker的Reduce任务完成后,都会在HDFS中生成一个输出文件。
Hadoop并不将这些文件合并,因为这些文件往往会作为另一个Map/reduce程序的输入。
以上的流程,粗略概括,就是从HDFS中获取数据,将其按照大小分片,进行分布式处理,最终输出结果。
从流程来看,Hadoop框架进行数据处理有以下要求:
1、数据已经存在在HDFS当中。
2、数据间是少关联的。
各个任务执行器在执行负责的数据时,无需考虑对其他数据的影响,数据之间应尽可能是无联系、不会影响的。
使用Hadoop,适合大批量的数据处理,这是他所擅长的。
由于基于Map/Reduce这种单级的数据处理模型进行,因此,如果数据间的关联系较大,需要进行数据的多级交互处理(某个阶段的处理数据依赖于上一个阶段),需要进行多次map/reduce。
又由于map/reduce每次执行都需要遍历整个数据集,对于数据的实时计算并不合适,于是有了storm。
对比Hadoop的批处理,Storm是个实时的、分布式以及具备高容错的计算系统。
同Hadoop一样Storm也可以处理大批量的数据,然而Storm在保证高可靠性的前提下还可以让处理进行的更加实时;也就是说,所有的信息都会被处理。
Storm同样还具备容错和分布计算这些特性,这就让Storm可以扩展到不同的机器上进行大批量的数据处理。
他同样还有以下的这些特性:
∙易于扩展:
对于扩展,伴随着业务的发展,我们的数据量、计算量可能会越来越大,所以希望这个系统是可扩展的。
你只需要添加机器和改变对应的topology(拓扑)设置。
Storm使用HadoopZookeeper进行集群协调,这样可以充分的保证大型集群的良好运行。
∙每条信息的处理都可以得到保证。
∙Storm集群管理简易。
∙Storm的容错机能:
一旦topology递交,Storm会一直运行它直到topology被废除或者被关闭。
而在执行中出现错误时,也会由Storm重新分配任务。
这是分布式系统中通用问题。
一个节点挂了不能影响我的应用。
∙低延迟。
都说了是实时计算系统了,延迟是一定要低的。
∙尽管通常使用Java,Storm中的topology可以用任何语言设计。
在线实时流处理模型
对于处理大批量数据的Map/reduce程序,在任务完成之后就停止了,但Storm是用于实时计算的,所以,相应的处理程序会一直执行(等待任务,有任务则执行)直至手动停止。
对于Storm,他是实时处理模型,与hadoop的不同是,他是针对在线业务而存在的计算平台,如统计某用户的交易量、生成为某个用户的推荐列表等实时性高的需求。
他是一个“流处理”框架。
何谓流处理?
storm将数据以Stream的方式,并按照Topology的顺序,依次处理并最终生成结果。
当然为了更好的理解文章,你首先需要安装和设置Storm。
需要通过以下几个简单的步骤:
∙从Storm官方下载Storm安装文件
∙将bin/directory解压到你的PATH上,并保证bin/storm脚本是可执行的。
尽管Storm是使用Clojure语言开发的,您仍然可以在Storm中使用几乎任何语言编写应用程序。
所需的只是一个连接到Storm的架构的适配器。
已存在针对Scala、JRuby、Perl和PHP的适配器,但是还有支持流式传输到Storm拓扑结构中的结构化查询语言适配器。
2. Storm的组件
Storm集群和Hadoop集群表面上看很类似。
但是Hadoop上运行的是MapReducejobs,而在Storm上运行的是拓扑(topology),这两者之间是非常不一样的。
一个关键的区别是:
一个MapReducejob最终会结束,而一个topology永远会运行(除非你手动kill掉)。
Storm集群主要由一个主节点(Nimbus后台程序)和一群工作节点(workernode)Supervisor的节点组成,通过Zookeeper进行协调。
Nimbus类似Hadoop里面的JobTracker。
Nimbus负责在集群里面分发代码,分配计算任务给机器,并且监控状态。
每一个工作节点上面运行一个叫做Supervisor的节点。
Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程。
每一个工作进程执行一个topology的一个子集;一个运行的topology由运行在很多机器上的很多工作进程组成。
1、Nimbus主节点:
主节点通常运行一个后台程序——Nimbus,用于响应分布在集群中的节点,分配任务和监测故障。
这个很类似于Hadoop中的JobTracker。
2、Supervisor工作节点:
工作节点同样会运行一个后台程序——Supervisor,用于收听工作指派并基于要求运行工作进程。
每个工作节点都是topology中一个子集的实现。
而Nimbus和Supervisor之间的协调则通过Zookeeper系统或者集群。
3、Zookeeper
Zookeeper是完成Supervisor和Nimbus之间协调的服务。
而应用程序实现实时的逻辑则被封装进Storm中的“topology”。
topology则是一组由Spouts(数据源)和Bolts(数据操作)通过StreamGroupings进行连接的图。
下面对出现的术语进行更深刻的解析。
4、Worker:
运行具体处理组件逻辑的进程。
5、Task:
worker中每一个spout/bolt的线程称为一个task.在storm0.8之后,task不再与物理线程对应,同一个spout/bolt的task可能会共享一个物理线程,该线程称为executor。
6、Topology(拓扑):
storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。
一个topology是spouts和bolts组成的图,通过streamgroupings将图中的spouts和bolts连接起来,如下图:
一个topology会一直运行直到你手动kill掉,Storm自动重新分配执行失败的任务,并且Storm可以保证你不会有数据丢失(如果开启了高可靠性的话)。
如果一些机器意外停机它上面的所有任务会被转移到其他机器上。
运行一个topology很简单。
首先,把你所有的代码以及所依赖的jar打进一个jar包。
然后运行类似下面的这个命令:
stormjarall-my-code.jarbacktype.storm.MyTopologyarg1arg2
这个命令会运行主类:
backtype.strom.MyTopology,参数是arg1, arg2。
这个类的main函数定义这个topology并且把它提交给Nimbus。
stormjar负责连接到Nimbus并且上传jar包。
Topology的定义是一个Thrift结构,并且Nimbus就是一个Thrift服务,你可以提交由任何语言创建的topology。
上面的方面是用JVM-based语言提交的最简单的方法。
7、Spout:
消息源spout是Storm里面一个topology里面的消息生产者。
简而言之,Spout从来源处读取数据并放入topology。
Spout分成可靠和不可靠两种;当Storm接收失败时,可靠的Spout会对tuple(元组,数据项组成的列表)进行重发;而不可靠的Spout不会考虑接收成功与否只发射一次。
消息源可以发射多条消息流stream。
使用OutputFieldsDeclarer.declareStream来定义多个stream,然后使用SpoutOutputCollector来发射指定的stream。
而Spout中最主要的方法就是nextTuple(),该方法会发射一个新的tuple到topology,如果没有新tuple发射则会简单的返回。
要注意的是nextTuple方法不能阻塞,因为storm在同一个线程上面调用所有消息源spout的方法。
另外两个比较重要的spout方法是ack和fail。
storm在检测到一个tuple被整个topology成功处理的时候调用ack,否则调用fail。
storm只对可靠的spout调
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 Storm 实现 实时 数据 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)