大数据技术正飞速地发展着,催生出一代又一代快速便捷的大数据处理引擎,无论是Hadoop、Storm,还是后来的Spark、Flink。然而,毕竟没有哪一个框架可以完全支持所有的应用场景,也就说明不可能有任何一个框架可以完全取代另一个。今天,将从几个项出发着重对比Spark与Flink这两个大数据处理引擎,探讨其两者的区别。

  

 

  一、Spark与Flink几个主要项目的对比与分析

  1.性能对比

  测试环境:

  CPU:7000个

  内存:单机128GB

  版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9

  数据:800MB,8GB,8TB

  算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类,通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果

  迭代:K=10,3组数据

  

  相同点:Spark与Flink都运行在Hadoop YARN上,两者都拥有非常好的计算性能,因为两者都可以基于内存计算框架以进行实时计算。

  相异点:结合上图三者的迭代次数(纵坐标是秒,横坐标是次数)图表观察,可得出在性能上,呈现Flink Spark Hadoop(MR)的结果,且迭代次数越多越明显。Flink之所以优于Spark和Hadoop,最主要的原因是Flink支持增量迭代,具有对迭代自动优化的功能。

  结果:Flink胜。

  2.流式计算比较

  相同点:Spark与Flink都支持流式计算。

  相异点:Spark是基于数据片集合(RDD)进行小批量处理的,它只能支持秒级计算,所以Spark在流式处理方面,不可避免会增加一些延时。Flink是一行一行的,它的流式计算跟Storm的性能差不多,是支持毫秒级计算的。

  结果:Flink胜。

  3.与Hadoop兼容性对比

  相同点:Spark与Flink的数据存取都支持HDFS、HBase等数据源,而且,它们的计算资源调度都支持YARN的方式。

  相异点:Spark不支持TableMapper和TableReducer这些方法。Flink对Hadoop有着更好的兼容,如可以支持原生HBase的TableMapper和TableReducer,唯一不足是新版本的MapReduce方法无法得到支持,现在只支持老版本的MapReduce方法。

  结果:Flink胜。

  4.SQL支持对比

  相同点:两者都支持SQL。

  相异点:从范围上说,Spark对SQL的支持比Flink的要大一些,而且Spark支持对SQL的优化(包括代码生成和快速Join操作),还要提供对SQL语句的扩展和更好地集成。Flink主要支持对API级的优化。

  结果:Spark胜。

  5.计算迭代对比

  相同点:如下图所示,Hadoop(MR)、Spark和Flink均能迭代。

  

  相异点:Flink特有delta-iterations,这让它能够在迭代中显著减少计算。并且Flink具有自动优化迭代程序功能,具体流程如下图所示。

  

  结果:Flink胜。

  6.社区支持对比

  相同点:Spark与Flink均有社区支持。

  相异点:Spark社区活跃度比Flink高很多。

  结果:Spark胜。

  二、Spark与Flink的特点剖析

  1.Spark 1.4的6大特点

  众所周知,提出最主要抽象概念——弹性分布式数据集(RDD)的是Spark。RDD是一个元素集合,将其划分到集群的各个节点上可以被并行操作。当然,用户也可以让Spark保留一个RDD在内存里,让其能在并行操作中被有效地重复使用。Spark是实至名归的快速、通用的计算集群系统。结合下图Spark架构图与生态系统图,可以看出Spark 1.4的6大特点:

  ①Spark SQL(DataFrame)添加了ORCFile类型支持以及所有的Hive metastore支持;

  ②增加了UI的Spark Streaming,使得用户查看各种状态更加地便捷,随着和Kafka融合的加深,对Kinesis的支持也加强了很多;

  ③Spark之所以提供了更多的算法和工具,是因为Spark ML/MLlib的ML pipelines越来越成熟;

  ④使用了REST API,Spark可以为应用获取如jobs、stages、storage info、tasks等各种信息;

  ⑤内存管理、代码生成、垃圾回收等方面都有很多改进,这些都得益于Tungsten项目的持续优化;

  ⑥SparkR的发布让Spark得到更友好的R语法的支持。

  2.Flink 0.9的7大特点

  作为可扩展的批处理和流式数据处理的数据处理平台,Flink的设计思想主要来源于Hadoop、MPP数据库、流式计算系统等。支持增量迭代计算是Flink最大的特点,而且其对于迭代计算和流式计算的支持力度都将会加强。结合下图Flink架构图与生态系统图,可以看出Flink 0.9的7大特点:

  

  ①搭载DataSet API,让Flink支持Java、Python和Scala等多种编程语言;

  ②同样地,搭载DataStream API,让Flink支持Java和Scala;

  ③Flink ML和Gelly提供机器学习和图处理的多种库;

  ④Table API能够支持类SQL;

  ⑤Flink能够支持高效序列化、反序列化;

  ⑥Flink和Hadoop相互兼容;

  ⑦Flink拥有自动优化迭代的功能。

  放眼未来,无论是Spark还是Flink,两者的发展重点都将是数据科学和平台API化,使其生态系统越来越完善。亦或许,会有更新的大数据处理引擎出现,谁知道呢。

Spark与Flink大数据处理引擎对比分析!的更多相关文章

  1. 一文带你彻底了解大数据处理引擎Flink内存管理

    摘要: Flink是jvm之上的大数据处理引擎. Flink是jvm之上的大数据处理引擎,jvm存在java对象存储密度低.full gc时消耗性能,gc存在stw的问题,同时omm时会影响稳定性.同 ...

  2. 新一代大数据处理引擎 Apache Flink

    https://www.ibm.com/developerworks/cn/opensource/os-cn-apache-flink/index.html 大数据计算引擎的发展 这几年大数据的飞速发 ...

  3. Spark(火花)快速、通用的大数据处理引擎框架

    一.什么是Spark(火花)? 是一种快速.通用处理大数据分析的框架引擎. 二.Spark的四大特性 1.快速:Spark内存上采用DAG(有向无环图)执行引擎非循环数据流和内存计算支持. 内存上比M ...

  4. 基于docker构建flink大数据处理平台

    https://www.cnblogs.com/1ssqq1lxr/p/10417005.html 由于公司业务需求,需要搭建一套实时处理数据平台,基于多方面调研选择了Flink. 初始化Swarm环 ...

  5. Flink流式引擎技术分析--大纲

    Flink简介 Flink组件栈 Flink特性 流处理特性 API支持 Libraries支持 整合支持 Flink概念 Stream.Transformation.Operator Paralle ...

  6. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink

    转自:https://www.cnblogs.com/reed/p/7730329.html 今天看到一篇讲得比较清晰的框架对比,这几个框架的选择对于初学分布式运算的人来说确实有点迷茫,相信看完这篇文 ...

  7. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看

    简介 大数据是收集.整理.处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称.虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性.规模,以及价值在最近几年才 ...

  8. 数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看

    简介 大数据是收集.整理.处理大容量数据集,并从中获得见解所需的非传统战略和技术的总称.虽然处理数据所需的计算能力或存储容量早已超过一台计算机的上限,但这种计算类型的普遍性.规模,以及价值在最近几年才 ...

  9. 0基础搭建Hadoop大数据处理-初识

    在互联网的世界中数据都是以TB.PB的数量级来增加的,特别是像BAT光每天的日志文件一个盘都不够,更何况是还要基于这些数据进行分析挖掘,更甚者还要实时进行数据分析,学习,如双十一淘宝的交易量的实时展示 ...

随机推荐

  1. Redis的设计与实现——字典

    参考博客 绝大多数语言中的字典底层实现基本上都是哈希表.哈希表中用 “负载因子” 来衡量哈希表的 空/满 程度.为了让负载因子在一定的合理范围之内,提高查询的性能,一般的做法是让哈希表扩容,然后reh ...

  2. Nhibernate入门与demo

    学习和使用Nhibernate已经很久了,一直想写点东西和大家一起学习使用Nhibernate.博客园里也有很多大牛写了很多关于Nhibernate入门的文章.其中:李永京的博客http://www. ...

  3. 浏览器测试string是否为图片

    在浏览器中直接打如下代码.其中adcd为图片转成的string data:image/jpeg;base64,abcd

  4. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  5. vue v-for 和 v-if 、v-else一起使用造成的bug

    现象:导致v-else 执行v-for的length次数, 从现象看应该v-for先解析,然后将v-if和v-else包在其中 解决方案:很简单,tempalte 将v-if v-else 隔离到最外 ...

  6. python构造栈结构

    栈:是一种先进后出的数据结构:本片文章,我们用python的面向对象来构造这样的数据结构. 栈中的每一个数据除了存储当前的数值外,还存储着当前数值下一个数据的类型(注意不是下一个数据的数值). cla ...

  7. Jsoup简介

    Jsoup简介 一.概述 Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来 ...

  8. phonegap 开发案例

    PhoneGap-Android-HTML5-WebSocket 不使用任何框架,教你制作网页滑动切换效果 http://www.csdn.net/article/2012-04-17/2804644 ...

  9. 怎么解决深入学习PHP的瓶颈

    PHP给学习者的感觉是:初学的时候很容易,但是学了2-3年,就深刻感觉遇到了瓶颈,很难深入,放弃又可惜.所谓"鸡肋,食之无味弃之可惜"的感觉很是贴切. 经常会有这种感觉:不学,看似 ...

  10. 20145122 《Java程序设计》第十周学习总结

    学习内容总结 网络编程 (1)网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. (2)程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴. (3 ...