极客视点
极客时间编辑部
极客时间编辑部
113241 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/06:07
登录|注册

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

讲述:丁婵大小:2.80M时长:06:07
Apache Flink 是新一代通用大数据处理引擎,旨在统一不同的数据负载,与 Spark 一样,旨在构建单一平台,可以在其中运行批处理、流媒体、交互式、图形处理、机器学习等。因此,Flink 与 Spark 的意识形态没有太大差别,但它们在实施细节方面确实存在很大差异。
近日,自动驾驶科学家 / 工程师黄浴编译了一篇关于Flink 和 Spark 的文章,该文从内存管理、流、数据源集成等多个方面介绍了 Flink 和 Spark 的差异,如下为重点内容。

1. 抽象

在 Spark 中,对于批处理,有 RDD 抽象和 DStream 用于流式传输,这是内部 RDD 本身。因此,在 Spark 下面代表的所有数据都使用 RDD 抽象来表示。而在 Flink 中,为批处理数据集提供了数据集抽象,为流应用程序提供了 DataStream。
在 Spark 中,RDD 在运行时表示为 Java 对象,随着 Project Tungsten 的推出,它有点变化。但在 Flink 中,数据集被表示为一个逻辑计划,Flink 的数据集就像 Spark 的 Dataframe API,在执行之前进行了优化。
另外,在 Spark 中,所有不同的抽象,如 DStream,Dataframe 都建立在 RDD 抽象之上。但在 Flink 中,Dataset 和 DataStream 是基于顶级通用引擎构建的两个独立抽象。虽然它们模仿了类似的 API,但是在 DStream 和 RDD 的情况下,无法将它们组合在一起。

2. 内存管理

Spark 使用 Java 堆来缓存数据,虽然项目开始时更容易,但它导致了内存不足(OOM)问题和垃圾收集(gc)暂停。因此,从 Spark1.5 开始,Spark 进入定制内存管理,称为 Project Tungsten。Spark 中的所有数据帧操作都直接在 Spark 1.5 的 Project Tungsten 二进制数据上运行。
而 Flink 从第一天起就开始定制内存管理,不仅将数据存储在它的自定义二进制布局中,它还直接对二进制数据进行操作。

3. 实施语言

Spark 在 Scala 中实现,它提供其他语言的 API,如 Java,Python 和 R。Flink 是用 Java 实现的,它提供了 Scala API。

4. 流作为平台与批处理作为平台

Spark 来自 Map / Reduce 时代,它将整个计算表示为数据作为文件集合的移动。这些文件可能作为磁盘上的阵列或物理文件驻留在内存中。这具有非常好的属性,如容错等。
但 Flink 是一种新型系统,它将整个计算表示为流处理,其中数据有争议地移动而没有任何障碍。

5. 流

Spark 将流式处理视为快速批处理,Flink 将批处理视为流处理的特殊情况,这两种方法的差异在于以下三点。
其一,实时与近实时。Flink 提供事件级处理,也称为实时流,Spark 只有不提供事件级粒度的最小批处理(mini-batch),这被称为近实时。前者是有限的流处理,而后者是更快的批处理。虽然大多数应用程序都可以近乎实时地使用,但很少有应用程序需要事件级实时处理。
其二,能够将历史数据 / 流相结合。运行流处理作为更快批处理的优点之一是,我们可以在两种情况下使用相同的抽象。 Spark 非常支持组合批处理和流数据,因为它们都使用 RDD 抽象。在 Flink 的情况下,批处理和流式传输不共享相同的 API 抽象。因此,尽管有一些方法可以将基于历史文件的数据与流相结合,但它并不像 Spark 那样干净。
其三,灵活的窗口。由于最小批处理的性质,Spark 现在对窗口的支持非常有限,允许根据处理时间窗口批量处理。另一方面,Flink 提供了非常灵活的窗口系统, Window 是 Flink 流 API 的主要焦点之一,它允许基于处理时间、数据时间和无记录等的窗口。

6. 数据源集成

Spark 数据源 API 是框架中最好的 API 之一。数据源 API 使得所有智能资源成为 Spark 上的头等公民。此 API 还提供了在源级执行谓词下推(predicate push down)等高级操作的功能。
Flink 仍然在很大程度上依赖于 Map / reduce InputFormat 来进行数据源集成。虽然它是足够好的提取数据 API,但它不能巧妙地利用源能力,因此 Flink 目前落后于数据源集成技术。

7. 迭代处理

Spark 最受关注的功能之一就是能够有效地进行机器学习。在内存缓存和其他实现细节中,它是实现机器学习算法的真正强大的平台。虽然 ML 算法是循环数据流,但它表示为 Spark 内部的直接非循环图。
Flink 在运行时支持受控循环依赖图(cyclic dependence graph),它以非常有效的方式表示 ML 算法。因此,Flink 支持本机平台中的迭代,与 DAG 方法相比,可实现卓越的可扩展性和性能。
以上就是今天的内容,希望对你有所帮助。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
1. 抽象
2. 内存管理
3. 实施语言
4. 流作为平台与批处理作为平台
5. 流
6. 数据源集成
7. 迭代处理
显示
设置
留言
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部