spark和flink的异同。

今天在StackOverflow上看到一个问题解答,很好的解释了spark和flink的区别。转到这里并做整理存以笔记以备日后学而时习之。

原文地址:

https://stackoverflow.com/questions/28082581/what-is-the-difference-between-apache-spark-and-apache-flink

问:apache spark 与 flink有什么区别?apache flink是否会取代hadoop?

答:

首先它们有哪些共同点?flink和spark都是apache 软件基金会(ASF)旗下顶级项目,都是通用数据处理平台。它们可以应用在很多的大数据应用和处理环境。并且有如下扩展:


SPARK   Flink
类SQL查询 Spark SQL MRQL
图计算 GraphX Spargel(基础)和Gelly(库)
机器学习 MLib Flink ML
流计算 Spark Streaming Flink Streaming
并且两者均可在不依赖于其他环境的情况下运行于standalone模式,或是运行在基于hadoop(YARN,HDFS)之上,由于它们均是运行于内存,所以他们表现的都比hadoop要好很多。

然而它们在实现上还是有很多不同点:

在spark 1.5.x之前的版本,数据集的大小不能大于机器的内存数。

Flink在进行集合的迭代转换时可以是循环或是迭代计算处理。这使得Join算法、对分区的链接和重用以及排序可以选择最优算法。当然flink也是一个很强大的批处理工具。flink的流式处理的是真正的流处理。流式数据一但进入就实时进行处理,这就允许流数据灵活地在操作窗口。它甚至可以在使用水印的流数中处理数据(It is even capable of handling late data in streams by the use of watermarks)。此外,flink的代码执行引擎还对现有使用storm,mapreduce等有很强的兼容性。

Spark 在另一方面是基于 弹性分布式数据集(RDD),这(主要的)给于spark基于内存内数据结构的函数式编程。它可以通过固定的内存给于大批量的计算。spark streaming 把流式数据封装成小的批处理,也就是它收集在一段时间内到达的所有数据,并在收集的数据上运行一个常规批处理程序。同时一边收集下一个小的批处理数据。

Flink 有可能会替代hadoop吗?

不会,hadoop 有以下几项功能:

1、HDFS - hadoop 分布式文件系统(hadoop Distributed Filesystem)

2、YARN - Yet Another Resource Negotiator(资源管理器)

3、MapReduce - 一个hadoop批处理框架

HDFS和YARN仍旧是大数据集群中不可缺少的一部份,这两项是部署其他分布式技术的基础,如分布式查询或分布式数据库 。MapReduce的主要用例是对数据集的批处理,而不是集群的RAM,而Flink则是为流和迭代处理而设计的。所以hadoop和flink能共存。即使如此,我还是强烈推荐更强大的,对批处理更易用的flink.


你可能感兴趣的:(spark,bigdata)