揭秘Apache顶级项目大数据分析引擎 Flink:与Spark的对比与分析
2015-09-23 10:55
936 查看
作者:李士窑、卢亿雷、彭远波
出处:infoq、csdn
Apache
Flink是一个高效、分布式、基于Java实现的通用大数据分析引擎,它具有分布式
MapReduce一类平台的高效性、灵活性和扩展性以及并行数据库查询优化方案,它支持批量和基于流的数据分析,且提供了基于Java和Scala的API。
具有如下主要特征:
Flink主要包括基于Java和Scala的用于批量和基于流数据分析的API、优化器和具有自定义内存管理功能的分布式运行时等,其主要架构如下:
与spark的对比
Spark是一种快速、通用的计算集群系统,Spark提出的最主要抽象概念是弹性分布式数据集(RDD),它是一个元素集合,划分到集群的各个节点上,可以被并行操作。用户也可以让Spark保留一个RDD在内存中,使其能在并行操作中被有效的重复使用。Flink是可扩展的批处理和流式数据处理的数据处理平台,设计思想主要来源于Hadoop、MPP数据库、流式计算系统等,支持增量迭代计算。
原理
Spark 1.4特点如下所示。
Spark为应用提供了REST API来获取各种信息,包括jobs、stages、tasks、storage info等。
Spark Streaming增加了UI,可以方便用户查看各种状态,另外与Kafka的融合也更加深度,加强了对Kinesis的支持。
Spark SQL(DataFrame)添加ORCFile类型支持,另外还支持所有的Hive metastore。
Spark ML/MLlib的ML pipelines愈加成熟,提供了更多的算法和工具。
Tungsten项目的持续优化,特别是内存管理、代码生成、垃圾回收等方面都有很多改进。
SparkR发布,更友好的R语法支持。
图1 Spark架构图
图2 Flink架构图
图3 Spark生态系统图
Flink 0.9特点如下所示。
DataSet API 支持Java、Scala和Python。
DataStream API支持Java and Scala。
Table API支持类SQL。
有机器学习和图处理(Gelly)的各种库。
有自动优化迭代的功能,如有增量迭代。
支持高效序列化和反序列化,非常便利。
与Hadoop兼容性很好。
图4 Flink生态系统图
分析对比
性能对比
首先它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink计算性能上略好。
测试环境:
CPU:7000个;
内存:单机128GB;
版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9
数据:800MB,8GB,8TB;
算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
迭代:K=10,3组数据
图5 迭代次数(纵坐标是秒,横坐标是次数)
总结:Spark和Flink全部都运行在Hadoop YARN上,性能为Flink > Spark > Hadoop(MR),迭代次数越多越明显,性能上,Flink优于Spark和Hadoop最主要的原因是Flink支持增量迭代,具有对迭代自动优化的功能。
流式计算比较
它们都支持流式计算,Flink是一行一行处理,而Spark是基于数据片集合(RDD)进行小批量处理,所以Spark在流式处理方面,不可避免增加一些延时。Flink的流式计算跟Storm性能差不多,支持毫秒级计算,而Spark则只能支持秒级计算。
与Hadoop兼容
计算的资源调度都支持YARN的方式
数据存取都支持HDFS、HBase等数据源。
Flink对Hadoop有着更好的兼容,如可以支持原生HBase的TableMapper和TableReducer,唯一不足是现在只支持老版本的MapReduce方法,新版本的MapReduce方法无法得到支持,Spark则不支持TableMapper和TableReducer这些方法。
SQL支持
都支持,Spark对SQL的支持比Flink支持的范围要大一些,另外Spark支持对SQL的优化,而Flink支持主要是对API级的优化。
计算迭代
delta-iterations,这是Flink特有的,在迭代中可以显著减少计算,图6、图7、图8是Hadoop(MR)、Spark和Flink的迭代流程。
图6 Hadoop(MR)迭代流程
图7 Spark迭代流程
图8 Flink迭代流程
Flink自动优化迭代程序具体流程如图9所示。
图9 Flink自动优化迭代程序具体流程
社区支持
Spark社区活跃度比Flink高很多。
总结
Spark和Flink都支持实时计算,且都可基于内存计算。Spark后面最重要的核心组件仍然是Spark SQL,而在未来几次发布中,除了性能上更加优化外(包括代码生成和快速Join操作),还要提供对SQL语句的扩展和更好地集成。至于Flink,其对于流式计算和迭代计算支持力度将会更加增强。无论是Spark、还是Flink的发展重点,将是数据科学和平台API化,除了传统的统计算法外,还包括学习算法,同时使其生态系统越来越完善。
出处:infoq、csdn
Apache
Flink是一个高效、分布式、基于Java实现的通用大数据分析引擎,它具有分布式
MapReduce一类平台的高效性、灵活性和扩展性以及并行数据库查询优化方案,它支持批量和基于流的数据分析,且提供了基于Java和Scala的API。
具有如下主要特征:
1. 快速
Flink利用基于内存的数据流并将迭代处理算法深度集成到了系统的运行时中,这就使得系统能够以极快的速度来处理数据密集型和迭代任务。2. 可靠性和扩展性
当服务器内存被耗尽时,Flink也能够很好的运行,这是因为Flink包含自己的内存管理组件、序列化框架和类型推理引擎。3. 表现力
利用Java或者Scala语言能够编写出漂亮、类型安全和可为核心的代码,并能够在集群上运行所写程序。开发者可以在无需额外处理就使用Java和Scala数据类型4. 易用性
在无需进行任何配置的情况下,Flink内置的优化器就能够以最高效的方式在各种环境中执行程序。此外,Flink只需要三个命令就可以运行在Hadoop的新MapReduce框架Yarn上,5. 完全兼容Hadoop
Flink支持所有的Hadoop所有的输入/输出格式和数据类型,这就使得开发者无需做任何修改就能够利用Flink运行历史遗留的MapReduce操作Flink主要包括基于Java和Scala的用于批量和基于流数据分析的API、优化器和具有自定义内存管理功能的分布式运行时等,其主要架构如下:
与spark的对比
Spark是一种快速、通用的计算集群系统,Spark提出的最主要抽象概念是弹性分布式数据集(RDD),它是一个元素集合,划分到集群的各个节点上,可以被并行操作。用户也可以让Spark保留一个RDD在内存中,使其能在并行操作中被有效的重复使用。Flink是可扩展的批处理和流式数据处理的数据处理平台,设计思想主要来源于Hadoop、MPP数据库、流式计算系统等,支持增量迭代计算。
原理
Spark 1.4特点如下所示。
Spark为应用提供了REST API来获取各种信息,包括jobs、stages、tasks、storage info等。
Spark Streaming增加了UI,可以方便用户查看各种状态,另外与Kafka的融合也更加深度,加强了对Kinesis的支持。
Spark SQL(DataFrame)添加ORCFile类型支持,另外还支持所有的Hive metastore。
Spark ML/MLlib的ML pipelines愈加成熟,提供了更多的算法和工具。
Tungsten项目的持续优化,特别是内存管理、代码生成、垃圾回收等方面都有很多改进。
SparkR发布,更友好的R语法支持。
图1 Spark架构图
图2 Flink架构图
图3 Spark生态系统图
Flink 0.9特点如下所示。
DataSet API 支持Java、Scala和Python。
DataStream API支持Java and Scala。
Table API支持类SQL。
有机器学习和图处理(Gelly)的各种库。
有自动优化迭代的功能,如有增量迭代。
支持高效序列化和反序列化,非常便利。
与Hadoop兼容性很好。
图4 Flink生态系统图
分析对比
性能对比
首先它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink计算性能上略好。
测试环境:
CPU:7000个;
内存:单机128GB;
版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9
数据:800MB,8GB,8TB;
算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
迭代:K=10,3组数据
图5 迭代次数(纵坐标是秒,横坐标是次数)
总结:Spark和Flink全部都运行在Hadoop YARN上,性能为Flink > Spark > Hadoop(MR),迭代次数越多越明显,性能上,Flink优于Spark和Hadoop最主要的原因是Flink支持增量迭代,具有对迭代自动优化的功能。
流式计算比较
它们都支持流式计算,Flink是一行一行处理,而Spark是基于数据片集合(RDD)进行小批量处理,所以Spark在流式处理方面,不可避免增加一些延时。Flink的流式计算跟Storm性能差不多,支持毫秒级计算,而Spark则只能支持秒级计算。
与Hadoop兼容
计算的资源调度都支持YARN的方式
数据存取都支持HDFS、HBase等数据源。
Flink对Hadoop有着更好的兼容,如可以支持原生HBase的TableMapper和TableReducer,唯一不足是现在只支持老版本的MapReduce方法,新版本的MapReduce方法无法得到支持,Spark则不支持TableMapper和TableReducer这些方法。
SQL支持
都支持,Spark对SQL的支持比Flink支持的范围要大一些,另外Spark支持对SQL的优化,而Flink支持主要是对API级的优化。
计算迭代
delta-iterations,这是Flink特有的,在迭代中可以显著减少计算,图6、图7、图8是Hadoop(MR)、Spark和Flink的迭代流程。
图6 Hadoop(MR)迭代流程
图7 Spark迭代流程
图8 Flink迭代流程
Flink自动优化迭代程序具体流程如图9所示。
图9 Flink自动优化迭代程序具体流程
社区支持
Spark社区活跃度比Flink高很多。
总结
Spark和Flink都支持实时计算,且都可基于内存计算。Spark后面最重要的核心组件仍然是Spark SQL,而在未来几次发布中,除了性能上更加优化外(包括代码生成和快速Join操作),还要提供对SQL语句的扩展和更好地集成。至于Flink,其对于流式计算和迭代计算支持力度将会更加增强。无论是Spark、还是Flink的发展重点,将是数据科学和平台API化,除了传统的统计算法外,还包括学习算法,同时使其生态系统越来越完善。
相关文章推荐
- Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
- Apache SSI配置 动态include静态html文件
- 使用LoadRunner监控Apache的步骤 (转)
- Datastax文档Apache Cassandra v2.1 第二部分 理解Cassandra架构_数据分发和副本
- APACHE服务实验
- CentOs中Apache开启rewrite模块详解
- apache kafka系列之log4j配置
- apache kafka系列之在zookeeper中存储结构
- CentOS Apache虚拟主机配置
- org.apache.subversion.javahl.ClientException: svn: E155021: This client is too old to work with the
- Apache经常使用配置
- apache搭建
- Apache2.4+php5.6+Mysql5.6+Mantisbt 配置
- apache virtualhost 针对ip开放访问
- apache日志分析
- Datastax文档Apache Cassandra v2.1 第二部分 理解Cassandra架构_节点间通信(Gossip)
- Datastax文档Apache Cassandra v2.1 第二部分 理解Cassandra架构之架构概要
- org.apache.hive.com.esotericsoftware.kryo.kryoexception: encountered unregistered class id 错误解决办法
- Datastax文档Apache Cassandra v2.1 第一部分 关于Apache Cassandra和CQL
- SpringMVC中Shiro报错org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible