分布式计算系统三巨头--Hadoop、Storm、Spark的区别和比较

目前主流的三大分布式计算系统Hadoop、Storm、Spark被广泛运用于大数据领域,且常常用来进行比较。现在就来分析一下,三只之间的区别

Hadoop、Spark的比较

核心组成
hadoop核心包括Hadoop分布式文件系统(HDFS),Hadoop YARN,Hadoop
MapReduce。
Spark包括sparkcore,sparksql,sparkstreaming,sparkcore可以用来做离线处理,sparksql可以用来交互式查询,sparkstreaming用来进行实时处理。

处理引擎
相比MapReduce基于磁盘的批量处理引擎,
Spark赖以成名之处是其数据实时处理功能。

存储方式
MapReduce和Spark的主要区别在于:
MapReduce使用持久存储。
而Spark使用弹性分布式数据集(RDDS)。

优劣对比
Spark是在借鉴了MapReduce之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷,具体如下:

  • 首先,Spark把中间数据放到内存中,迭代运算效率高。
    MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度。而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。
  • 其次,Spark容错性高。
    Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即允许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错。
    MapReduce和Spark从两个不同的方向来解决问题。MapReduce使用nodemanager节点,它为 Appmaster节点提供了心跳(heartbeat)。如果没有心跳,那么Appmaster节点重新调度所有将执行的操作和正在进行的操作,交 给另一个nodemanager节点。这种方法在提供容错性方面很有效,可是会大大延长某些操作(即便只有一个故障)的完成时间。
  • 最后,Spark更加通用。
    不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,同时还提供Count, Actions包括Collect、Reduce、Lookup和Save等操作。另外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。

交互模式
Spark还有一种交互模式,那样开发人员和用户都可以获得查询和其他操作的即时反馈。MapReduce没有交互模式,不过有了Hive和Pig等附加模块,采用者使用MapReduce来得容易一点。

Spark、Storm

实时计算模型
storm 纯实时,来一条数据,处理一条数据
sparkstreaming准实时,对一个时间段内的数据收集起来,作为一个RDD,再处理

实时计算延迟度
storm 毫秒级延迟
sparkstreaming 秒级延迟

吞吐量
storm 吞吐量相对较低
sparkstreaming 吞吐量相对较高

事务机制
storm 支持完善的事务机制
sparkstreaming 支持事务,但本身机制不够完善

动态调整并行度
storm 可通过代码动态的调整并行度
sparkstreaming不支持。

应用场景

  • 对于Storm 来说
    1.建议在那种需要纯实时,不能忍受1秒以上延迟的场景下使用,比如金融系统,要求纯实时进行金融交易。
    2. 此外,如果对于实时计算的功能中,要求可靠的事物机制和可靠性保证,即数据的处理完全精准,一条也不能多,一条也不能少,也可以考虑使用storm
    3. 如果还需要针对高峰低峰时间段,动态调整实时计算程序的并行度,以最大限度利用资源,也可以考虑使用storm
    4. 如果是一个大数据应用系统,他就是纯粹的实时计算,不需要在中间执行sql交互式查询,复杂的transformation算子等,那么用Storm是比较好的选择

  • 对于sparkstreaming来说
    对于以上的三点,一条都不满足的场景,即不要纯实时,不要求强大可靠的事务机制,不要求动态调整并行度,那么可以考虑使用sparkstreaming。
    考虑sparkstreaming最主要的一个因素,应该是针对整个项目进行宏观的考虑,如果一个项目除了实时处理以外,还包括了离线批处理,交互式查询等业务功能,那么首选spark生态,用sparkcore开发离线批处理,用sparksql开发交互式查询,用sparkstreaming开发实时计算,三者可以无缝整合,给系统提供非常高的可拓展性。

你可能感兴趣的:(大数据学习,大数据,Hadoop,storm,spark)