大数据处理引擎Spark与Flink对比

                      大数据处理引擎Spark与Flink对比

大数据技术正飞速地发展着,催生出一代又一代快速便捷的大数据处理引擎,无论是Hadoop、Storm,还是后来的Spark、Flink。然而,毕竟没有哪一个框架可以完全支持所有的应用场景,也就说明不可能有任何一个框架可以完全取代另一个。

Spark简介

Spark的历史比较悠久,已经发展了很长时间,目前在大数据领域也有了一定的地位.Spark是Apache的一个顶级项目。它是一种快速的、轻量级、基于内存、分布式迭代计算的大数据处理框架。,Spark最初由美国加州伯克利大学(UCBerkeley)的AMP(Algorithms,Machines and People)实验室与2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。2003年加入Apache孵化器项目后的到迅猛的发展,如今已成为Apache的顶级项目。

Flink简介

Flink出来的时间比较晚,可以说是大数据流计算的新贵,但是发展速度很快,劲头不容小觑,到2016年的时候才崭露头角,Stratosphere 项目最早在 2010 年 12 月由德国柏林理工大学教授 Volker Markl 发起,主要开发人员包括 Stephan Ewen、Fabian Hueske。Stratosphere 是以 MapReduce 为超越目标的系统,同时期有加州大学伯克利 AMP 实验室的 Spark。相对于 Spark,Stratosphere 是个彻底失败的项目。其实刚开始的时候Flink也是做批处理的,但是当时,spark已经在批处理领域有所建树,所以Flink决定放弃批处理,直接在流处理方面发力.所以 Volker Markl 教授参考了谷歌的流计算最新论文 MillWheel,决定以流计算为基础,开发一个流批结合的分布式流计算引擎 Flink。Flink 于 2014 年 3 月进入 Apache 孵化器并于 2014 年 11 月毕业成为 Apache 顶级项目。

1. Flink VS Spark 之 API

Spark与Flink API情况如下:

Spark与Flink 对开发语言的支持如下所示:

 

2. Flink VS Spark 之 Connectors

Spark 支持的Connectors如下所示:

 

Flink支持的Connectors如下所示:

 

从Flink和Spark Connectors对比可以看出,Spark与Flink支持的Connectors的数量差不多,目前来说可能Spark支持更多一些,Flink后续的支持也会逐步的完善。

3.性能对比

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

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

结果:Flink胜。

4.流式计算比较

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

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

5.与Hadoop兼容性对比

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

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

6.SQL支持对比

相同点:两者都支持SQL。

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

7.计算迭代对比

Flink特有delta-iterations,这让它能够在迭代中显著减少计算。并且Flink具有自动优化迭代程序功能。

①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语法的支持。
①搭载DataSet API,让Flink支持Java、Python和Scala等多种编程语言;

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

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

④Table API能够支持类SQL;

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

⑥Flink和Hadoop相互兼容;

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

8.运行时架构对比

Spark批计算是把 DAG 划分为不同 stage,DAG 节点之间有血缘关系,在运行期间一个 stage 的 task 任务列表执行完毕,销毁再去执行下一个 stage;Spark Streaming 则是对持续流入的数据划分一个批次,定时去执行批次的数据运算。Structured Streaming 将无限输入流保存在状态存储中,对流数据做微批或实时的计算,跟 Dataflow 模型比较像。

Flink 有统一的 runtime,在此之上可以是 Batch API、Stream API、ML、Graph、CEP 等,DAG 中的节点上执行上述模块的功能函数,DAG 会一步步转化成 ExecutionGraph,即物理可执行的图,最终交给调度系统。节点中的逻辑在资源池中的 task 上被 apply 执行,task 和 Spark 中的 task 类似,都对应线程池中的一个线程。在 DAG 的执行上,Spark 和 Flink 有一个比较显著的区别。在 Flink 的流执行模式中,一个事件在一个节点处理完后的输出就可以发到下一个节点立即处理。这样执行引擎并不会引入额外的延迟。与之相应的,所有节点是需要同时运行的。而 Spark 的 micro batch 和一般的 batch 执行一样,处理完上游的 stage 得到输出之后才开始下游的 stage。

总结

spark和flink最大的区别还是在对流计算的支持上面,Spark Streaming 和 Structured Streaming 是用批计算的思路做流计算,Flink 采用 Dataflow 模型,和 Lambda 模式不同。现在两者也都在做批流统一的相关工作,从spark最新的发展来看,会发展成一个和 Flink 的流处理模式比较相似的执行引擎。不过主要的功能都还在开发中或者待开发。对将来能做到什么程度,和 Spark 原来的 batch 执行引擎怎么结合,我们拭目以待。Flink也在做大量的完善工作,也逐步在ML,图计算等领域发力,使得Flink的生态系统越来越完善。

附安装使用教程:

Local Installation
Follow these few steps to download the latest stable versions and get started.

Step 1: Download
To be able to run Flink, the only requirement is to have a working Java 8 or 11 installation. You can check the correct installation of Java by issuing the following command:
install java first
$ java -version
Download the 1.11.2 release and un-tar it.
$ tar -xzf flink-1.11.2-bin-scala_2.11.tgz
$ cd flink-1.11.2-bin-scala_2.11

Step 2: Start a Cluster
Flink ships with a single bash script to start a local cluster.
$ ./bin/start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host.
Starting taskexecutor daemon on host.

Step 3: Submit a Job
Releases of Flink come with a number of example Jobs. You can quickly deploy one of these applications to the running cluster.
$ ./bin/flink run examples/streaming/WordCount.jar
$ tail log/flink-*-taskexecutor-*.out
  (to,1)
  (be,1)
  (or,1)
  (not,1)
  (to,2)
  (be,2)
Additionally, you can check Flink’s Web UI to monitor the status of the Cluster and running Job.

Step 4: Stop the Cluster
When you are finished you can quickly stop the cluster and all running components.
$ ./bin/stop-cluster.sh

【参考】:

 https://www.zhihu.com/question/30151872

https://blog.csdn.net/xianpanjia4616/article/details/85076247

http://spark.apache.org/

https://flink.apache.org/

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页