Hadoop、Spark、Storm对比

Hadoop、Spark、Storm对比

1 Hadoop、Spark、Storm基本介绍

1.1 Hadoop

Hadoop项目是开发一款可靠的、可扩展性的、分布式计算的开源软件。通过编写MapReduce程序即可在分布式集群中处理大型数据。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储,并且保障计算机集群的高可用。并且逐步发展成一个较为完善的生态系统。

1.2 Spark

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

1.3 Stom

Apache Storm是一个免费的开源分布式实时计算系统。Storm可以可靠地处理实时流数据流,可以应用在实时分析,在机器学习,连续计算,分布式RPC,ETL等。

2 应用场景对比

2.1 Hadoop应用场景

Hadoop是实现了MapReduce的思想,将数据切片计算来处理大量的离线数据。Hadoop处理的数据必须是已经存放在HDFS上或者类似HBase的数据库中。
Hadoop的适用场景:

  1. 大数据量存储(HDFS)
  2. 日志处理。
  3. 大规模Web信息搜索
  4. 数据密集型并行计算
  5. Hadoop与Apache Mahout项目可以用于机器学习
  6. Hadoop与Hive可以作为数据仓库。
  7. Hadoop与lucene实现搜索引擎

2.2 Spark 应用场景

Spark使用基于内存的计算,运算速度能做到比Hadoop MapReduce的运算速度快上100倍。因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Reduce的算法。
Spark的适用场景:

  1. 多次操作特定数据集的应用场合:Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
  2. 粗粒度更新状态的应用: 由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如Web服务的存储或者是增量的Web爬虫和索引。就是对于那种增量修改的应用模型不适合。

2.3 Storm应用场景

Storm是一个优秀的流式计算框架。Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。
Storm的适用场景:

  1. 流数据处理: Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。
  2. 分布式RPC: 由于Storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式RPC框架来使用。

2.4 应用场景总结。

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

3 开发方式对比

Hadoop 使用Java语言开发。在使用Hadoop进行数据处理时,主要是编写MapReduce程序,Hadoop支持使用Java,Python,c语言等编写程序。但是MapReduce程序编写比较困难。
Spark使用Scala语言开发,提供80多个高级接口,可以轻松构建并行应用程序。 并且可以从Scala,Python,R或在Spark shell中以通过交互方式编写Spark程序。
Storm的主要开发语言是clojure,完成核心功能逻辑,辅助开发语言还有Python和java。用户可以用多种语言去编写。

4 生态系统

4.1 生态系统总览

大数据生态系统
图 4 1
如图4-1所示,蓝色部分是Hadoop生态组件,黄色部分是Spark生态组件。
紫色是Storm应用。

4.2 Hadoop生态系统

4.2.1 HDFS

HDFS是Hadoop 生态系统的基础组件是 Hadoop 分布式文件系统(HDFS)。
MapReduce:Hadoop 的主要执行框架即 MapReduce,它是一个用于分布式并行数据处理的编程模型,将job分为 mapping 阶段和 reduce 阶段

4.2.2 HBase

HBase一个构建在 HDFS 之上的面向列的 NoSQL 数据库,HBase 用于对大量数据进行快速读取/写入。HBase 将 Zookeeper 用于自身的管理,以保证其所有组件都正在运行。

4.2.3 Zookeeper

Zookeeper 是 Hadoop 的分布式协调服务。Zookeeper 被设计成可以在机器集群上运行,是一个具有高度可用性的服务,用于 Hadoop 操作的管理,而且很多 Hadoop 组件都依赖它。

4.2.4 Pig

对 MapReduce 编程复杂性的抽象,Pig 平台包含用于分析 Hadoop 数据集的执行环境和脚本语言(Pig Latin)。它的编译器将 Pig Latin 翻译为 MapReduce 程序序列。
Hive:类似于 SQL 的高级语言,用于执行对存储在 Hadoop 中数据的查询,Hive允许不熟悉MapReduce的开发人员编写数据查询语句。

4.3 Spark 生态系统

Spark生态系统
图 4 2

4.3.1 Spark Streaming

Spark Streaming 是一个对实时数据流进行高吞吐、高容错的流式处理系统,可以对多种数据源(如Kafka、Flume、Twitter 和ZeroMQ 等)进行类似Map、Reduce 和Join 等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘。

4.3.2 Spark SQL

Spark SQL 的前身是Shark,它发布时Hive 可以说是SQL on Hadoop 的唯一选择(Hive 负责将SQL 编译成可扩展的MapReduce 作业),鉴于Hive 的性能以及与Spark 的兼容,Shark 由此而生。

4.3.3 MLBase/MLlib

MLBase 是Spark 生态系统中专注于机器学习的组件,它的目标是让机器学习的门槛更低,让一些可能并不了解机器学习的用户能够方便地使用MLBase。

4.3.4 GraphX

GraphX 最初是伯克利AMP 实验室的一个分布式图计算框架项目,后来整合到Spark 中成为一个核心组件。它是Spark 中用于图和图并行计算的API,可以认为是GraphLab 和Pregel 在Spark 上的重写及优化。跟其他分布式图计算框架相比,GraphX 最大的优势是:在Spark 基础上提供了一栈式数据解决方案,可以高效地完成图计算的完整的流水作业。

4.4 Storm 生态系统

Storm是一个流式处理框架,通过与Hadoop等结合起来使用。所以没有生态系统。

5 Hadoop、Spark、Storm重要知识

5.1 Hadoop

Hadoop 主要是通过谷歌的三大论文Google File System,Google Bigtable,Google MapReduce 开源实现。 Mapreduce是一个计算框架,通过输入,mapreduce通过用户编写的MapReduce程序处理输入,得到一个输出。
我们要学习的就是这个计算模型的运行规则。在运行一个MapReduce计算任务时候,任务过程被分为两个阶段:map阶段和reduce阶段,每个阶段都是用键值对作为输入和输出。而编写MapReduce函数时就要做的就是定义好这两个阶段的函数:map函数和reduce函数。

5.2 Spark

Spark最重要的概念就是RDD(Resilient Distributed Dataset)——弹性分布式数据集。他是Spark中最基本的数据抽象。Rdd代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。并且通过RDD,Spark可以进行DAG(有向无环图)进行优化,从而使Spark有较快的计算速度。

5.3 Storm

5.3.1 Topologys(拓扑)

Topologies是一个分布式实时计算应用,它通过Stream groupings把spouts和Bolts串联起来组成了流数据处理结构,Topologies在集群中一直运行,直拓扑时扑才会结束运行。

5.3.2 Streams(数据流)

Streams是storm最核心的抽象概念,一个Stream是一个没有边界的tuple序列,Streams是由Tuple(元组)组成的,Tuple支持的类型有Integer、 Long、 Short、Byte、String、Double、Float、Boolean、Byte arrays。Tuple也支持可序列化的对象。

5.3.3 Spouts(数据源)

Spout是拓扑的数据流的源头,Spout不断的从外部读取数据(数据库、kafka等外部资源),并发送到拓扑中进行实时的处理。

6 参考文献

http://hadoop.apache.org (available 2018.10.10)
http://spark.apache.org (available 2018.10.10)
http://storm.apache.org (available 2018.10.10)
https://blog.csdn.net/zuochao_2013/article/details/78175419 (available 2018.10.11)
http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html (available 2018.10.11)
http://spark.apache.org/docs/latest/ (available 2018.10.11)
https://zhuanlan.zhihu.com/p/46220467 (available 2018.10.11)
https://blog.csdn.net/isjoker/article/details/79976007 (available 2018.10.11)
https://blog.csdn.net/broadview2006/article/details/80127731 (available 2018.10.11)
http://blog.bizcloudsoft.com/wp-content/uploads/Google-File-System中文版_1.0.pdf (available 2018.10.11)
http://blog.bizcloudsoft.com/wp-content/uploads/Google-Bigtable中文版_1.0.pdf (available 2018.10.11)
http://blog.bizcloudsoft.com/wp-content/uploads/Google-MapReduce中文版_1.0.pdf (available 2018.10.11)
https://blog.csdn.net/congcong68/article/details/73009054 (available 2018.10.11)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值