Storm与Spark、Hadoop三种框架对比

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Storm与Spark、Hadoop这三种框架,各有各的优点,每个框架都有自己的最佳应用场景。所以,在不同的应用场景下,应该选择不同的框架。

Storm与Spark、Hadoop三种框架对比



一、Storm与Spark、Hadoop三种框架对比


Storm与Spark、Hadoop这三种框架,各有各的优点,每个框架都有自己的最佳应用场景。所以,在不同的应用场景下,应该选择不同的框架。


1.Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。

Storm的适用场景:


1)流数据处理

Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。


2)分布式RPC。由于Storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式RPC框架来使用。


2.Spark是一个基于内存计算的开源集群计算系统,目的是更快速的进行数据分析。Spark由加州伯克利大学AMP实验室Matei为主的小团队使用Scala开发,类似于Hadoop MapReduce的通用并行计算框架,Spark基于Map Reduce算法实现的分布式计算, 拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Reduce的算法。


Spark的适用场景:


1)多次操作特定数据集的应用场合


Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。


2)粗粒度更新状态的应用


由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如Web服务的存储或者是增量的Web爬虫和索引。就是对于那种增量修改的应用模型不适合。

总的来说Spark的适用面比较广泛且比较通用。


3.Hadoop是实现了MapReduce的思想,将数据切片计算来处理大量的离线数据。Hadoop处理的数据必须是已经存放在HDFS上或者类似HBase的数据库中,所以Hadoop实现的时候是通过移动计算到这些存放数据的机器上来提高效率。


Hadoop的适用场景:

1)海量数据的离线分析处理

2)大规模Web信息搜索

3)数据密集型并行计算


简单来说:


Hadoop适合于离线的批量数据处理适用于对实时性要求极低的场景
Storm适合于实时流数据处理,实时性方面做得极好
Spark是内存分布式计算框架,试图吞并Hadoop的Map-Reduce批处理框架和Storm的流处理框架,但是Spark已经做得很不错了,批处理方面性能优于Map-Reduce,但是流处理目前还是弱于Storm,产品仍在改进之中


二、hadoop的应用业务分析


大数据是不能用传统的计算技术处理的大型数据集的集合。它不是一个单一的技术或工具,而是涉及的业务和技术的许多领域。


目前主流的三大分布式计算系统分别为Hadoop、Spark和Strom:


  • Hadoop当前大数据管理标准之一,运用在当前很多商业应用系统。可以轻松地集成结构化、半结构化甚至非结构化数据集。
  • Spark采用了内存计算。从多迭代批处理出发,允许将数据载入内存作反复查询,此外还融合数据仓库,流处理和图形计算等多种计算范式。Spark构建在HDFS上,能与Hadoop很好的结合。它的RDD是一个很大的特点。
  • Storm用于处理高速、大型数据流的分布式实时计算系统。为Hadoop添加了可靠的实时数据处理功能。


Hadoop是使用Java编写,允许分布在集群,使用简单的编程模型的计算机大型数据集处理的Apache的开源框架。 Hadoop框架应用工程提供跨计算机集群的分布式存储和计算的环境。 Hadoop是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储。


Hadoop适用于海量数据、离线数据和负责数据,应用场景如下:


  • 场景1:数据分析,如京东海量日志分析,京东商品推荐,京东用户行为分析
  • 场景2:离线计算,(异构计算+分布式计算)天文计算
  • 场景3:海量数据存储,如京东的存储集群


三、浅谈Hadoop的基本原理


Hadoop分布式处理框架核心设计:


  • HDFS:(Hadoop Distributed File System)分布式文件系统;
  • MapReduce:是一种计算模型及软件架构。


2.1 HDFS


HDFS(Hadoop File System),是Hadoop的分布式文件存储系统。


将大文件分解为多个Block,每个Block保存多个副本。提供容错机制,副本丢失或者宕机时自动恢复。默认每个Block保存3个副本,64M为1个Block。将Block按照key-value映射到内存当中。


10ff98eda9714758873e4fc31d1b565b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

图二 数据写入HDFS


ffcf51b948fb4faab254cb694ad96a6f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

图三 HDFS读取数据


2.2 MapReduce


MapReduce是一个编程模型,封装了并行计算、容错、数据分布、负载均衡等细节问题。MapReduce实现最开始是映射map,将操作映射到集合中的每个文档,然后按照产生的键进行分组,并将产生的键值组成列表放到对应的键中。化简(reduce)则是把列表中的值化简成一个单值,这个值被返回,然后再次进行键分组,直到每个键的列表只有一个值为止。这样做的好处是可以在任务被分解后,可以通过大量机器进行并行计算,减少整个操作的时间。但如果你要我再通俗点介绍,那么,说白了,Mapreduce的原理就是一个分治算法。


  • MapReduce计划分三个阶段执行,即映射阶段,shuffle阶段,并减少阶段。
  • 映射阶段:映射或映射器的工作是处理输入数据。一般输入数据是在文件或目录的形式,并且被存储在Hadoop的文件系统(HDFS)。输入文件被传递到由线映射器功能线路。映射器处理该数据,并创建数据的若干小块。
  • 减少阶段:这个阶段是:Shuffle阶段和Reduce阶段的组合。减速器的工作是处理该来自映射器中的数据。处理之后,它产生一组新的输出,这将被存储在HDFS。


82987c2129ac43799a3a9b9fe8d6823e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

图四 MapReduce


2.3 HIVE


hive是基于Hadoop的一个数据仓库工具, 可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行,这套SQL 简称HQL。使不熟悉mapreduce 的用户很方便的利用SQL 语言查询,汇总,分析数据。而mapreduce开发人员可以把己写的mapper 和reducer 作为插件来支持Hive 做更复杂的数据分析。


b1f2da88698a4796ad98bea6bc552d48_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

图五 HIVE体系架构图


由上图可知,hadoop和mapreduce是hive架构的根基。Hive架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor)。


Hadoop与Storm的对比



1、Hadoop上运行的是MapReducejobs,而在Storm上运行的是topology。


2、 Hadoop使用磁盘作为中间交换的介质,而storm的数据是一直在内存中流转。


3、hadoop的数据源是HDFS上某文件夹下已经存在的TB级的大数据,待处理的数据是相对不变的;而Storm的数据源是实时新增的B或KB级的小数据,处理的数据是支持增加的。


4、一个MapReduce job数据处理完后会自动结束, 而一个topology数据处理完后会一直等待下一个数据的到来,不会自动停止(除非你手动强制停止)。


5、hadoop擅长批处理、吞吐量大、做全量数据的离线分析,Storm的优势是数据的实时分析,以实时性高被广泛应用,单位时间内的吞吐量要小于hadoop。


6、对比Hadoop的批处理,Storm是一个实时处理计算框架,是针对在线业务而存在的计算平台。同Hadoop一样Storm也可以处理大批量的数据,然而Storm在保证高可靠性的前提下还可以让处理进行的更加实时。Storm同样具备容错和分布计算这些特性

Storm易于扩展,随着业务的发展,数据量、计算量的增大,只需要添加机器和改变对应的topology(拓扑)设置。Storm使用Zookeeper进行集群协调,充分保证集群的稳定运行。Storm一旦递交topology就会一直运行,直到topology被废除或者被关闭。而在执行中出现错误时,也会由Storm重新分配任务,一个节点挂了不能影响我的应用。


7、Hadoop下的Map/Reduce计算框架对于数据的处理流程是:


(1) 将要处理的数据上传到Hadoop的文件系统HDFS中。


(2) Map阶段: 对于大量的数据进行切分,划分为M个16~64M的数据分片(可通过参数自定义分片大小)。调用Mapper函数:Master为Worker分配Map任务,每个分片都对应一个Worker进行处理。各个Worker读取并调用用户定义的Mapper函数处理数据,并将结果存入HDFS,返回存储位置给Master。一个Worker在Map阶段完成时,在HDFS中,生成一个排好序的Key-values组成的文件。并将位置信息汇报给Master。


(3)Reduce阶段:Master为Worker分配Reduce任务,他会将所有Mapper产生的数据进行映射,将相同key的任务分配给某个Worker。调用Reduce函数:各个Worker将分配到的数据集进行排序,并调用用户自定义的Reduce函数,并将结果写入HDFS。每个Worker的Reduce任务完成后,都会在HDFS中生成一个输出文件。


使用Hadoop需要先将数据put到Hdfs,按每16-64MB切一个文件的粒度来计算,1分钟已经过去了,Hadoop 开始计算时,开始调度任务又花了一分钟,然后作业运行起来,假设机器特别多,几钞钟就计算完,然后假设写数据库也花了很少的时间,这样从数据产生到最后可以使用已经过去了两分钟多。


88fdf8ba73f146d3af488bb9f116abfa_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.jpg

f4af950bc9b34433af6f285a0af49f2f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.jpg


8、Storm是一个流式计算框架,对于数据的处理流程是:Storm将数据以Stream的方式,并按照Topology的顺序,依次处理并最终生成结果。


流计算


流计算是数据产生时,就有一个程序一直在监控数据,产生一行就通过传输系统发给流式计算系统,然后流式计算系统直接处理,处理完后直接写入数据库,每条数据从产生到写入数据库,可以在毫秒内完成。


storm特性



   1.适用场景广泛: storm可以实时处理消息和更新DB,对一个数据量进行持续的查询并返回客户端(持续计算),对一个耗资源的查询作实时并行化的处理(分布式方法调用,即DRPC),storm的这些基础API可以满足大量的场景。


   2. 可伸缩性高:  Storm的可伸缩性可以让storm每秒可以处理的消息量达到很高。扩展一个实时计算任务,你所需要做的就是加机器并且提高这个计算任务的并行度 。Storm使用ZooKeeper来协调集群内的各种配置使得Storm的集群可以很容易的扩展。


   3. 保证无数据丢失: 实时系统必须保证所有的数据被成功的处理。 那些会丢失数据的系统的适用场景非常窄, 而storm保证每一条消息都会被处理, 这一点和S4相比有巨大的反差。


   4. 异常健壮: storm集群非常容易管理,轮流重启节点不影响应用。


   5. 容错性好:在消息处理过程中出现异常, storm会进行重试


   6. 语言无关性: Storm的topology和消息处理组件(Bolt)可以用任何语言来定义, 这一点使得任何人都可以使用storm.


相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
13天前
|
分布式计算 Hadoop 大数据
Spark 与 Hadoop 的大数据之战:一场惊心动魄的技术较量,决定数据处理的霸权归属!
【8月更文挑战第7天】无论是 Spark 的高效内存计算,还是 Hadoop 的大规模数据存储和处理能力,它们都为大数据的发展做出了重要贡献。
37 2
|
21天前
|
分布式计算 Hadoop 大数据
Hadoop与Spark在大数据处理中的对比
【7月更文挑战第30天】Hadoop和Spark在大数据处理中各有优势,选择哪个框架取决于具体的应用场景和需求。Hadoop适合处理大规模数据的离线分析,而Spark则更适合需要快速响应和迭代计算的应用场景。在实际应用中,可以根据数据处理的需求、系统的可扩展性、成本效益等因素综合考虑,选择适合的框架进行大数据处理。
|
2月前
|
分布式计算 资源调度 Hadoop
Java大数据处理:Spark与Hadoop整合
Java大数据处理:Spark与Hadoop整合
|
2月前
|
分布式计算 资源调度 Java
Scala+Spark+Hadoop+IDEA实现WordCount单词计数,上传并执行任务(简单实例-下)
Scala+Spark+Hadoop+IDEA实现WordCount单词计数,上传并执行任务(简单实例-下)
34 0
|
分布式计算 Hadoop Spark
《Spark与Hadoop大数据分析》——3.7 小结
本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第3章,第3.7节,作者 [美]文卡特·安卡姆(Venkat Ankam),译 吴今朝,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1106 0
|
分布式计算 资源调度 Hadoop
《Spark与Hadoop大数据分析》——3.6 Spark 资源管理器:Standalone、YARN和Mesos
本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第3章,第3.6节,作者 [美]文卡特·安卡姆(Venkat Ankam),译 吴今朝,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2641 0
|
存储 缓存 分布式计算
《Spark与Hadoop大数据分析》——3.5 持久化与缓存
本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第3章,第3.5节,作者 [美]文卡特·安卡姆(Venkat Ankam),译 吴今朝,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1199 0
|
分布式计算 Java Shell
《Spark与Hadoop大数据分析》——3.4 Spark 应用程序
本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第3章,第3.4节,作者 [美]文卡特·安卡姆(Venkat Ankam),译 吴今朝,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1363 0
|
分布式计算 数据可视化 Hadoop
《Spark与Hadoop大数据分析》——3.3 Spark 程序的生命周期
本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第3章,第3.3节,作者 [美]文卡特·安卡姆(Venkat Ankam),译 吴今朝,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1535 0

相关实验场景

更多