Spark与Flink的区别

Spark与Flink的区别

来自virender的提问

What is the difference between Apache Spark and Apache Flink?

Apache Spark与Apache Flink的区别是啥?

Apache Flink将来会取代Hadoop吗?

来自Matthias Krick的最佳回答

首先它们的相同点是什么?Flink和Spark都是通用数据处理平台,并且都是ASF(Apache Software Foundation)的顶级项目。它们都有广阔的应用领域,适用于很多大数据场景。它们有很多扩展,例如SQL查询(Spark有Spark SQL,Flink有MRQL),图形处理(Spark有GraphX,Flink有Spargel和Gelly),机器学习(Spark有MLlib,Flink有Flink ML),流式处理(Spark Streaming,Flink Streaming)。它们都可以单机模式执行,还有很多人在Hadoop上使用它们(YARN,HDFS)。由于它们的内存计算特性,二者都具有很好的性能。

然而,它们实现这些的方法以及它们适用的场景是不同的。

不同点:在总结Flink和Spark的不同点之前,我想先提供两条链接,这里介绍了一些细节。如果你有时间,可以看看Apache Flink is the 4G of BigData Analytics FrameworkFlink and Spark Similarities and Differences

与Flink不同,Spark在1.5.x版本之前无法处理超过RAM大小的数据集。

Flink通过在集合上使用迭代转换,为循环或者迭代处理做了最优化。这是通过对拼接算法,操作链,重复使用切片和排序的最优化来实现的。然而,Flink对批处理也是一个很好的工具。Flink streaming是真正的流式处理,也就是说,数据元素一旦到来,立刻就被流式程序流水线化了。这就允许在数据流上执行灵活的窗口操作。它甚至能够通过使用watermarks处理晚到的数据。甚至,Flink提供了很强的兼容模式,可以在flink计算引擎上使用现有的storm,map reduce,代码等等。

相反,Spark是基于RDDs(resilient distributed datasets)的。这种驻留内存式的数据结构给予了spark的函数式编程范式强大的能量。它通过固定内存能够胜任大批量计算。Spark streaming将数据流切分成微批量数据,也就是说,它将一段特定时间内到达的所有数据收集起来,并且在收集好的数据上执行批量程序。当批量程序执行的时候,与此同时收集下一个微批量数据。

那么Flink是否会取代Hadoop呢?

可以肯定的说,Flink不会取代Hadoop。Hadoop包含不同的部分:

HDFS – Hadoop Distributed Filesystem

YARN – Yet Another Resource Negotiator (or Resource Manager)

MapReduce – The batch processing Framework of Hadoop

HDFS和YARN仍然是大数据集群不可获取的一部分。它们俩是构建例如分布式查询引擎或者分布式数据库这类分布式技术的基础。MapReduce的主要应用场景是对于超过集群RAM大小的数据集进行批处理,而Flink是针对流和迭代处理的。即使我强烈建议使用Flink的更加强大,更加易用的批处理能力,但是Hadoop和Flink仍然是可以共存的。

参考资料

本文译自What is the difference between Apache Spark and Apache Flink?

发表评论

电子邮件地址不会被公开。 必填项已用*标注