1. Storm是什么,怎么做,如何做的更好? storm是一个开源的分布式实时计算系统?可以简单、可靠地处理大量的数据流。Storm有很多实用场景?如实时分析、在线机器学习、持续计算、分布式RPC、ETL等等。Storm支持水平扩展?具有高容错性?保证每个消息都会得到处理?而且处理速度很快?在一个小集群中?每个结点每秒可以处理数以百万计的消息?。Storm的部署和运维都很便捷?而且更为重要的是可以使用任意编程语言来开发应用 2. Storm与Spark、Hadoop相比是否有优势? 从整体设计上讲: Hadoop是磁盘级计算,进行计算时,数据在磁盘上,需要读写磁盘;Storm是内存级计算,数据直接通过网络导入内存。读写内存比读写磁盘速度快n个数量级。磁盘访问延迟约为内存访问延迟的75000倍。所以Storm更快。 storm的网络直传、内存计算,其时延必然比hadoop的通过hdfs传输低得多;当计算模型比较适合流式时,storm的流式处理,省去了批处理的收集数据的时间;因为storm是服务型的作业,也省去了作业调度的时延。所以从时延上来看,storm要快于hadoop。 从原理上讲: Hadoop M/R基于HDFS,需要切分输入数据、产生中间数据文件、排序、数据压缩、多份复制等,效率较低。 Storm 基于ZeroMQ这个高性能的消息通讯库,不持久化数据。 看看典型的应用场景: (1)几千个日志生产方产生日志文件,需要进行一些ETL操作存入一个数据库。 假设利用hadoop,则需要先存入hdfs,按每一分钟切一个文件的粒度来算(这个粒度已经极端的细了,再小的话hdfs上会一堆小文件),hadoop开始计算时,1分钟已经过去了,然后再开始调度任务又花了一分钟,然后作业运行起来,假设机器特别多,几钞钟就算完了,然后写数据库假设也花了很少的时间,这样,从数据产生到最后可以使用已经过去了至少两分多钟。 而流式计算则是数据产生时,则有一个程序去一直监控日志的产生,产生一行就通过一个传输系统发给流式计算系统,然后流式计算系统直接处理,处理完之后直接写入数据库,每条数据从产生到写入数据库,在资源充足时可以在毫秒级别完成。 (2)如果一个大文件的wordcount,把它放到storm上进行流式的处理,等所有已有数据处理完才让storm输出结果,这时候,你再把它和hadoop比较快慢,这时,其实比较的不是时延,而是比较的吞吐了。 3. 说说您读完试读样章后的启发 最主要的方面:Hadoop使用磁盘作为中间交换的介质,而storm的数据是一直在内存中流转的。 两者面向的领域也不完全相同,一个是批量处理,基于任务调度的;另外一个是实时处理,基于流。 以水为例,Hadoop可以看作是纯净水,一桶桶地搬;而Storm是用水管,预先接好(Topology),然后打开水龙头,水就源源不断地流出来了。 |