首页 > 科技 >

Apache 两个开源项目比较:Flink vs Spark

2019-08-19 09:25:41 暂无 阅读:1258 评论:0

Apache Flink 是新一代通用大数据处理引擎,旨在统一分歧的数据负载。 听起来像 Apache Spark 吗? 是的。 Flink 正试图解决 Spark 试图解决的同样问题。 这两个系统都旨在构建单一..,能够在个中运行批处理,流媒体,交互式,图形处理,机械进修等。是以,Flink 与 Spark 的意识形态中介没有太大不同。 但它们在实施细节方面的确存在很大差别。

下面对照 Spark 和 Flink 的分歧。 一些方式在两个框架中都是沟通的,而有些方式有很大分歧。

Apache 两个开源项目比较:Flink vs Spark

图片源自黄浴的知乎1. 抽象

在 Spark 中,对于批处理,有 RDD 抽象和 DStream 用于流式传输,这是内部 RDD 自己。是以,在 Spark 下面代表的所稀有据都使用 RDD 抽象来透露。

在 Flink 中,为批处理数据集供应了数据集抽象,为流应用法式供应了 DataStream。它们听起来与 RDD 和 DStreams 非常相似,但它们不是。

差别是以下几点:

数据集在运行时只是规划

在 Spark 中,RDD 在运行时透露为 java 对象。跟着 project Tungsten 的推出,它有点转变。但在 Apache Flink 中,数据集被透露为一个逻辑规划。这听起来很熟悉吗?是的,它们就像 Spark 中的 Dataframe。所以在 Flink 中能够像使用优化器优化的一等公民那样获得像 api 如许的 Dataframe。然则在 Spark RDD 之间不做任何优化。

Flink 的数据集就像 Spark 的 Dataframe API,在执行之进步行了优化。

在 Spark 1.6 中,数据集 API 被添加到 spark 中,这或者最终庖代 RDD 抽象。

Dataset 和 DataStream 是自力的 API

在 Spark 中,所有分歧的抽象,如 DStream,Dataframe 都竖立在 RDD 抽象之上。但在 Flink 中,Dataset 和 DataStream 是基于顶级通用引擎构建的两个自力抽象。固然它们模拟了雷同的 API,然则在 DStream 和 RDD 的情形下,无法将它们组合在一路。尽管在这方面有一些起劲,但最终究竟还不敷明确。

不克将 DataSet 和 DataStream 组合在一路,如 RDD 和 DStreams。

是以,固然 Flink 和 Spark 都有雷同的抽象,但它们的实现体式分歧。

Apache 两个开源项目比较:Flink vs Spark

2. 内存治理

直到 Spark 1.5,Spark 使用 Java 堆来缓存数据。固然项目起头时更轻易,但它导致了内存不足(OOM)问题和垃圾收集(gc)暂停。是以,从 1.5 起头,Spark 进入定制内存治理,称为 project tungsten。

Flink 从第一天起就起头定制内存治理。实际上,这是 Spark 向这个偏向成长的灵感之一。不光 Flink 将数据存储在它的自界说二进制结构中,它的确直接对二进制数据进行把持。在 Spark 中,所稀有据帧把持都直接在 Spark 1.5 的 project tungsten 二进制数据上运行。

在 JVM 上执行自界说内存治理能够提高机能并提高资源行使率。3. 实施说话

Spark 在 Scala 中实现。它供应其他说话的 API,如 Java,Python 和 R。

Flink 是用 Java 实现的。它的确供应了 Scala API。

是以,与 Flink 比拟,Spark 中的选择说话更好。在 Flink 的一些 scala API 中,java 抽象也是 API 的。这会有所改善,因为已经使 scala API 获得了更多用户。4. API

Spark 和 Flink 都模拟 scala 鸠合 API。所以从外观来看,两者的 API 看起来非常相似。

Apache 两个开源项目比较:Flink vs Spark

5. 流

Apache Spark 将流式处理视为快速批处理。 Apache Flink 将批处理视为流处理的特别情形。这两种方式都具有令人入神的寄义。

两种分歧方式的差别或寄义:

实时与近实时

Apache Flink 供应事件级处理,也称为实时流。它与 Storm 模型非常相似。

Spark 只有不供应事件级粒度的最小批处理(mini-batch)。这种方式被称为近实时。

Spark 流式处理是更快的批处理,Flink 批处理是有限的流处理。

固然大多数应用法式都能够近乎实时地使用,但很少有应用法式需要事件级实时处理。这些应用法式平日是 Storm 流而不是 Spark 流。对于他们来说,Flink 将成为非常有趣的选择。

可以将汗青数据 / 流相连系

运行流处理作为更快批处理的长处之一是,我们能够在两种情形下使用沟通的抽象。 Spark 非常支撑组合批处理和流数据,因为它们都使用 RDD 抽象。

在 Flink 的情形下,批处理和流式传输不共享沟通的 API 抽象。是以,尽管有一些方式能够将基于汗青文件的数据与流相连系,但它并不像 Spark 那样清洁。

在很多应用中,这种能力非常主要。在这些应用法式中,Spark 取代 Flink 流式传输。

天真的窗口

因为最小批处理的性质,Spark 如今对窗口的支撑非常有限。许可凭据处理时间窗口批量处理。

与其他任何系统比拟,Flink 供应了非常天真的窗口系统。 Window 是 Flink 流 API 的首要核心之一。它许可基于处理时间、数据时间和无记录等的窗口。这种天真性使 Flink 流 API 与 Spark 比拟非常壮大。

Apache 两个开源项目比较:Flink vs Spark

6. SQL 界面

截止今朝,最活跃的 Spark 库之一是 spark-sql。 Spark 供应了像 Hive 一般的查询说话和像 DSL 如许的 Dataframe 来查询构造化数据。它是成熟的 API 而且在批处理中普遍使用而且很快将在流媒体世界中使用。

截止今朝,Flink Table API 仅支撑 DSL 等数据帧,而且仍处于测试阶段。有规划添加 sql 接口,但不确定何时会落在框架中。

今朝为止,Spark 与 Flink 比拟有着不错的 SQL 故事。7. 数据源集成

Spark 数据源 API 是框架中最好的 API 之一。数据源 API 使得所有智能资源如 NoSQL 数据库,镶木地板,优化队列(Optimized Row Columnar,ORC)成为 Spark 上的优等公民。此 API 还供应了在源级执行谓词下推(predicate push down)等高级把持的功能。

Flink 仍然在很大水平上依靠于 map / reduce InputFormat 来进行数据源集成。固然它是充沛好的提取数据 API,但它不克巧妙地行使源能力。是以 Flink 今朝掉队于今朝的数据源集成手艺。

Apache 两个开源项目比较:Flink vs Spark

8. 迭代处理

Spark 最受存眷的功能之一就是可以有效地进行机械进修。在内存缓存和其他实现细节中,它是实现机械进修算法的真正壮大的..。

固然 ML 算法是轮回数据流,但它透露为 Spark 内部的直接非轮回图。平日,没有分布式处理系统鼓励轮回数据流,因为它们变得难以懂得。

然则 Flink 对其他人接纳了一些分歧的方式。它们在运行时支撑受控轮回依靠图(cyclic dependence graph)。这使得它们与 DAG 透露比拟以非常有效的体式透露 ML 算法。是以,Flink 支撑本机..中的迭代,与 DAG 方式比拟,可实现卓越的可扩展性和机能。9. 流作为..与批处理作为..

Apache Spark 来自 Map / Reduce 时代,它将整个较量透露为数据作为文件鸠合的移动。这些文件或者作为磁盘上的阵列或物理文件驻留在内存中。这具有非常好的属性,如容错等。

然则 Flink 是一种新型系统,它将整个较量透露为流处理,个中数据有争议地移动而没有任何障碍。这个设法与像 akka-streams 如许的新的回响流系统非常相似。10. 成熟

Flink 像批处理如许的部门已经投入生产,但其他部门如流媒体,Table API 仍在络续成长。这并不是说在生产中就没人使用 Flink 流。

Apache 两个开源项目比较:Flink vs Spark

图片源自黄浴的知乎总结

与 Flink 比拟,Spark 是一个非常成熟和完整的框架,但 Flink 的确带来了非常有趣的设法,如自界说内存治理,数据集 API 等。 Spark 社区正在熟悉它并将这些设法融入到 Spark 中。 所以从这个意义上来说,Flink 正在将大数据处理完全提拔到下一个条理。

相关文章