Spark和Flink的计算模型对比研究

2023-02-18

随着物联网和移动互联网的发展, 数据呈集合级数增长。这些数据的存储和处理需求也随之增加。通常而言, 大数据不仅包括大量数据, 同时还包括存储和处理这些数据的新范式和各种技术。在这样的背景下, 催生了众多处理框架, 如MapReduce、Apache Spark和Apache Flink等, 这些技术框架进行研究具有较大意义, 可直接指导项目开发和应用。

从原理和实现机制的角度, 对Spark和Flink进行多维度的对比从而更加深入的理解这两个计算框架被认可和使用的原因, 并为在使用这两者时有针对性的选择各自使用的领域以及能够对其进行修改、调试分析以及调优提供方法和理论支撑。

下面本文将分为四个部分进行论述, 第一部分是关于Spark的原理介绍, 第二部分是Flink的介绍, 第三部分将会从几个不同的角度分别对Spark和Flink进行比较, 最后是总结。

一、Spark

(一) 介绍

Spark是继MapReduce之后又一个被广泛使用一个开源的计算框架。

MapReduce解决了在大体量数据进行跨机器的计算问题, 通过利用分布式计算、数据分摊、容错以及均衡处理的。

由Google提出的MapReduce的分布式计算框架, 解决了在多个普通机器上进行并行计算、数据分布、容错以及计算均衡的对大数据情况下的计算问题。从此开辟了用普通计算机就能解决大数据计算的问题, 随着数据量的增加和计算类型的增加, MapReduce也逐渐暴露一些问题, 比如大量的IO操作使得性能降低、机器学习算法中的迭代计算性能低以及一些交互式的查询分析。Spark通过实现弹性分布式数据集RDD (Resilien Distributed Datasets) 这一抽象概念, 使得其在性能上有了大幅的提升。这也是Spark能被很多企业接受和使用的根本原因, 并用在也数据生产和管理的各个环节发挥着重要的作用。

(二) 体系结构

Spark的软件体系结构是一个分层的架构, 具有清晰的模块和功能划分。具体如图1所示。

在最底层是Spark的核心用来生成RDD和基于RDD的计算, 而这个核心必须建立在用网络连接起来的机器集群之上, 至于如何分配、使用和调度底层的物理资源这些都由这个核心来完成, 对上层是完全透明的。

上层具体库都是针对一些特定问题的软件包, 关系型分析的Spark SQL、流式计算的Spark Streaming、机器学习的MLlib以及图计算的GraphX。这些计算任务都要转成RDD来完成所有的计算逻辑。

(三) 计算模型

弹性分布式数据集是Spark能够实现比MapReduce更优越的性能的根本原因, 充分利用了集群机器的内存, 这样减少了由于数据复制、磁盘IO和序列化带来的开销。Spark是由Scala语言实现的, 运行在以JVM为基础软件包。RDD是一种分布在集群中的只读的数据集Scala对象, 这个对象包含了一系列信息知道如何从稳定存储到经历一些转化过程以及一些操作。

RDD模型在设计上的一些优势

(1) RDD的创建只能是外部存储或者由其他RDD通过转换操作而来, 并且记录了其来源, 相比分布式共享内存 (DSM) 具有确定性。那么, 当数据丢失或者计算节点宕机时可以从已有的RDD的来源信息重新计算出丢失的;

(2) 基于本地数据进行任务的调度提高了计算性能;

(3) 但RDD的分区数据超过了内存的大小, RDD会将存储到本地的磁盘来保证计算的稳定性和效率。

另外, Spark提供了关于RDD的一系列编程接口方便用户使用RDD来表达问题并解决该问题所要进行的计算。

(四) 运行机制

(1) 整个系统将会运行在集群管理器管理着的集群上, 这样Spark系统就可以使用集群中的机器计算资源了;

(2) Spark系统在运行时会有Driver节点和Worker节点。Drvier节点会接受用户提交的应用, 并生成RDD及建立血缘关系, 跟踪RDD的血缘关系, 接受Worker节点的计算结果。而Worker节点是接收有Driver的调度器分发的任务;

(3) 最后, 有Driver节点的程序调用Action操作后将Worker的所有节点的结果汇总。

二、Flink部分

(一) 介绍

随着移动互联网和物联网的发展, 并逐步渗透人们的生成和生活的方方面面, 随之而来的是大量的多维的数据。而在很多时候人们对数据反映信息的获得的时间要求越来越短, 这对于人们的及时决策起着非常重要的作用。

Apache Flink是在这个背景下产生一个基于流式数据计算模型的一个实时计算平台, 支持分布式流计算和批量计算两种方式。

(二) 体系结构

Apache Flink是一个分布式的计算系统, 逻辑上组成部分如图所示, 结构和功能的都非常清晰直观。在理解框架构成和原理都非常容易, 分为四层:部署层、核心计算层、API层和特定应用领域库。为了能适用不同的平台和部署的需要, 提供兼容本地模式、集群环境以及云计算环境的部署方式。本地部署针对开发环境, 在实际的数据生产环境都是需要大量的计算能力可以将其部署在多台物理机器也可以部署在虚拟机上, 也可以使用云服务提供商所提供的Flink软件服务。

(三) 计算模型

Flink最根本的计算模型是dataflow。最后的批处理和实时流计算都要转化为dataflow graph来进行计算。

Apache Flink的软件栈, 其基础部分是分布式的流式数据流的运行时, 这是作为其实现计算的基础。数据流计算模型定义了一些基本的数据操作、基于窗口操作以及触发器操作等, 这些操作在语义上具有通用性能描述批处理、微批处理和流模型甚至混合处理模型。那么, 基于这样描述能力较强的数据流模型就能分别建立上层的流处理API和批处理API, 从而实现了将流处理和批处理统一到一个框架之内, 这样减少了使用的成本。

(四) 运行机制

在Flink的世界了一切都是流, 基于流执行引擎, Flink提供了更多更高层的API以便用户编写分布式任务, 目前互联网领域的实时搜索、数据平台整合、数据分析和机器学习等许多任务都可以在Flink平台上运行。

流式处理数据流引擎, 可以用该引擎在高吞吐数据源上轻松运行实时流处理。Flink支持无序事件的事件时间语义、确切一次语义、反压力控制以及为写入流和批处理应用程序的API。

三、对比分析

(一) 计算模型

从计算模型的角度看, 两者有本质的区别, 是两种完全不同的计算方式。

Spark最主要的抽象概念是弹性分布式数据集 (RDD) , 它是一个元素的集合, 将数据划分到集群的各个节点上, 可以被并行操作。通过将数据尽可能地内存中完成所有的计算, 这样减少了中间结果频繁地从磁盘读取和写入增加IO操作, 增加了数据计算延时。

Flink的计算模型是基于数据流图, 将批处理和流处理的计算都编译成一个有向无环图来表示。图的顶点是运算或操作, 弧表示数据应该进行的下一步计算或者操作。该模型提供了针对key-value数据对的操作, 如window, trigger等。这样的模型可以将流处理和批处理用统一的模型来表示, 而批处理仅仅是流处理的一个特殊情况。

(二) 设计目标

由于背景和初衷不一样就会产生不一样的解决方法, Spark是继MapReduce之后, 并沿用了Map和Reduce的方式进行解决在大规模机器上进行大量数据的计算, 而Spark主要是通过基于内存计算来减少IO操作来减低计算时间。Flink出现的背景是要进行批处理和流处理时, 需要用两种不同的计算框架写两套完全不同的代码, 而Flink通过底层的数据流的计算模型引擎来实现将批处理和流处理统一起来。

四、总结

对Spark和Flink的计算机制的深入探究, 比较两者背后的设计思想和出发点。Spark实现RDD的内存数据结构模型加速了计算的速度和较少了数据的IO操作, 而Flink则实现了数据流模型, 数据的计算按照有向无环图的计算过程。通过对比在针对具体问题、场景以及性能的来选择合适的计算框架来解决大数据环境下的计算问题。

摘要:随着物联网和移动互联网的发展和信息技术向各行业的深入渗透, 随之而来的是大量数据的存储、计算和分析等问题。而对数据的分析和挖掘是现在面临的一个非常重要的课题, 这里将对当前大数据技术环境下的两个计算框架的计算机制的对比分析, 找出这两种在具体解决问题上的如何设计和由此产生的差异。从原理和实现机制的角度, 对Spark和Flink进行多维度的对比从而更加深入的理解这两个计算框架被认可和使用的原因, 并为在使用这两者时有针对性的选择各自使用的领域以及能够对其进行修改、调试分析以及调优提供方法和理论支撑。

关键词:大数据,Spark,Flink,对比分析

参考文献

[1] Apache Spark, http://spark.apache.org/.

[2] Apache Flink, https://flink.apache.org/.

[3] 吴信东, 嵇圣硙. MapReduce与Spark用于大数据分析之比较[J].软件学报, 2018, 29 (6) :260-281.

[4] Matei Zaharia, Mosharaf Chowdhury, Tathagata Das, Ankur Dave, Justin Ma, Murphy McCauley, Michael J. Franklin, Scott Shenker, and Ion Stoica. 2012. Resilient distributed datasets:a faulttolerant abstraction for in-memory cluster computing. In Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation (NSDI’12) . USENIX Association, Berkeley, CA, USA, 2-2.

[5] DeanJ, GhemawatS.MapReduce:SimplifiedData Processing on Large Clusters[C]//Proceedings of the 6th conference on Symposium on Opearting Systems Design&ImplementationVolume 6. USENIX Association, 2004.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:大数据安全与隐私保护技术论文下一篇:家具设计教学中创新思维的培养模式构建——以邵阳学院家具设计课程教学为例