简介

hadoop

  • 是一个文件系统,外加一个离线处理框架(map-reduce执行框架),主要用于海量数据文件的保存、非实时的海量数据的计算。
  • 提供的上层api不太友好,且mapreduce处理框架比较慢,现在基本上只拿它来作为文件系统使用。

spark

  • 是一个执行引擎,本身不保存数据,需要外部的文件系统来保存数据,很多时候会基于hadoop来保存数据。
  • spark计算时尽可能把数据放到内存中(基于内存),还提供了很好的上层用户使用的接口,包括spl语句(spark sql),处理数据十分方便。它比map-reduce处理框架(基于磁盘)要快很多倍。现在基本上用它来做离线数据处理。

storm

  • 是一个实时数据处理框架,只提供最基本的数据流传输框架元素和基本的数据流接口,用户需要自己编写处理过程和处理逻辑。

flink

  • 是实时数据处理系统,自己有一套完整的生态。上层提供了很多数据处理算子(接口函数)供用户使用,对用户更加友好,方便使用。现在很多公司都用它来进行实时数据处理。

Hadoop、Spark、Flink

其他网址

​Hadoop对比:Hadoop、Spark、Flink三大框架对比 - 知乎​

1、数据处理对比

Hadoop专为批处理而生,一次将大量数据集输入到输入中,进行处理并产生结果。

Spark:定义是一个批处理系统,但也支持流处理。

Flink:支持批处理和流处理。两者可以单独运行,也可以流批一体地运行。

2、流引擎对比

Hadoop:Hadoop默认的MapReduce,仅面向于批处理。

Spark:Spark Streaming以微批处理数据流,实现​准实时​的批处理和流处理。

Flink:Flink是真正的​实时​流引擎,使用流来处理工作负载,包括流,SQL,微批处理和批处理。

3、数据流对比

Hadoop:MapReduce计算数据流没有任何循环,每个阶段使用上一阶段的输出,并为下一阶段产生输入。

Spark:尽管机器学习算法是循环数据流,但Spark将其表示为(DAG)直接非循环图或有向无环图。

Flink:Flink在运行时支持受控循环依赖图,支持机器学习算法非常有效。

4、计算模型对比

Hadoop:MapReduce采用了面向批处理的模型,批处理静态数据。

Spark:Spark采用了微批处理。微批处理本质上是一种“先收集再处理”的计算模型。

Flink:Flink采用连续流式流传输模型,实时对数据进行处理,而不会在收集数据或处理数据时出现任何延迟。

5、性能对比

Hadoop:Hadoop仅支持批处理,不支持处理流数据,与Spark和Flink相比,性能会降低。

Spark:支持微批处理,但流处理效率不如Apache Flink。

Flink: 性能很强。Flink使用本机闭环迭代运算符,尤其在支持机器学习和图形处理方面,表现优异。

6、内存管理对比

Hadoop:提供可配置的内存管理,可以动态或静态地执行此操作。

Spark:提供可配置的内存管理,从Spark 1.6开始已朝着自动进行内存管理的方向发展。

Flink:有自己的内存管理系统,提供自动内存管理。

Spark VS Storm

其他网址



对比点



Spark Streaming



Storm



实时计算模型



准实时,对一个时间段内的数据收集起来,作为一个RDD,再处理



纯实时,来一条数据,处理一条数据



实时计算延迟度



秒级



毫秒级



吞吐量







事务机制



支持,但不够完善



支持完善



健壮性 / 容错性



Checkpoint,WAL,一般



ZooKeeper,Acker,非常强



动态调整并行度



不支持



支持


Storm使用场景

1、建议在那种需要纯实时,不能忍受1秒以上延迟的场景下使用,比如实时金融系统,要求纯实时进行金融交易和分析

2、此外,如果对于实时计算的功能中,要求可靠的事务机制和可靠性机制,即数据的处理完全精准,一条也不能多,一条也不能少,也可以考虑使用Storm

3、如果还需要针对高峰低峰时间段,动态调整实时计算程序的并行度,以最大限度利用集群资源(通常是在小型公司,集群资源紧张的情况),也可以考虑用Storm

4、如果一个大数据应用系统,它就是纯粹的实时计算,不需要在中间执行SQL交互式查询、复杂的transformation算子等,那么用Storm是比较好的选择

Spark Streaming使用场景

1、如果对上述适用于Storm的三点,一条都不满足的实时场景,即,不要求纯实时,不要求强大可靠的事务机制,不要求动态调整并行度,那么可以考虑使用Spark Streaming

2、考虑使用Spark Streaming最主要的一个因素,应该是针对整个项目进行宏观的考虑,即,如果一个项目除了实时计算之外,还包括了离线批处理、交互式查询等业务功能,而且实时计算中,可能还会牵扯到高延迟批处理、交互式查询等功能,那么就应该首选Spark生态,用Spark Core开发离线批处理,用Spark SQL开发交互式查询,用Spark Streaming开发实时计算,三者可以无缝整合,给系统提供非常高的可扩展性

Spark Streaming与Storm的优劣分析

        Spark Streaming绝对谈不上比Storm优秀。这两个框架在实时计算领域中,都很优秀,只是擅长的细分场景并不相同。

        Spark Streaming仅仅在吞吐量上比Storm要优秀,而吞吐量这一点,也是历来挺Spark Streaming,贬Storm的人着重强调的。但是问题是,是不是在所有的实时计算场景下,都那么注重吞吐量?不尽然。因此,通过吞吐量说Spark Streaming强于Storm,不靠谱。

        Storm在实时延迟度上,比Spark Streaming就好多了,前者是纯实时,后者是准实时。而且,Storm的事务机制、健壮性 / 容错性、动态调整并行度等特性,都要比Spark Streaming更加优秀。

        Spark Streaming,有一点是Storm绝对比不上的,就是:它位于Spark生态技术栈中,因此Spark Streaming可以和Spark Core、Spark SQL无缝整合,也就意味着,我们可以对实时处理出来的中间数据,立即在程序中无缝进行延迟批处理、交互式查询等操作。这个特点大大增强了Spark Streaming的优势和功能。

Spark VS Flink

其他网址

 ​​spark与flink比较?在国内的现状如何? - 知乎​

Spark

Flink

成熟度

高(因为起步早)

侧重点

批处理

流处理

实时性

准实时

真正实时

流行度

使用的公司较多。

较少(因为起步晚)

性能

弱于Flink

强于Spark

发展趋势

发展趋势不如Flink

发展趋势好于Spark

好用的地方

批处理

时间机制、状态管理、流批一体