1.3 计算引擎选型比较
表格 大数据计算引擎按技术趋势分代
代表 | 特点 | 类似实现 |
---|---|---|
v1: MapReduce | 将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个完整的算法,例如迭代计算。 | |
v2: | DAG 框架的产生 | 如 Tez 以及更上层的 Oozie。 |
v3:Spark | Job 内部的 DAG 支持(不跨越 Job),以及强调的实时计算。 | |
v4:Flink | 流计算的支持,以及更一步的实时性。 | Spark Streaming、Storm、Samza |
备注:1. 以上分代只要针对技术发展的趋势。实际中上一代的产品如果有持续更新,也会升级到新一代。
- ASF:Apache 软件基金会,Storm/Flink/Hadoop/Spark 等大多数的大数据框架都属于 ASF。
表格 14 数据计算引擎比较列表
简介 | 特性 | 实时 | 批处理 | 内存计算 | |
---|---|---|---|---|---|
MR | 2004 年诞生,IO 较慢。 MapReduce 是一种编程模型,用于大规模数据集(大于 1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想。 | 一个基于集群的高性能并行计算平台。 一个并行计算与运行软件框架。 一个并行程序设计模型与方法。 | × | √ | × |
Spark | Spark 是加州大学伯克利分校 AMP 实验室在 2009 年开发的通用内存并行计算框架, Scala 语言实现。 Spark 在 2013 年 6 月进入 Apache 成为孵化项目,2014 年 12 月 Spark1.2.0 发布。 | 高级 API 剥离了对集群本身的关注,只需关注计算本身。计算快,支持交互式计算和复杂算法(内存计算下,Spark 比 Hadoop 快 100 倍)。 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等。 | √ | √ | √ |
Storm | 来源于 BackType 。2011 年 BackType 被 Twitter 收购,Storm 开源;2013 年被 Apache 孵化。 | 一个分布式流计算引擎。 动态处理大量生成的“小数据块”上要更好,时延更小。 | √ | × | √ |
Flink | 2008 年出现在柏林理工大学研究项目里;2014 年被 Apache 孵化。 | . | √ | √ | √ |
备注:1. UC Berkeley AMP lab~ Algorithms, Machines, and People Lab
- 数据处理方式
- 批处理:成批理的处理一批数据。
- 流式处理:每个节点实现一个基本的计算过程,而数据项在互相连接的网络节点中流进流出。Spark 的实时处理为 Spark Stream.
- 微批处理:mirco-batching,对一个时间段内的数据收集起来,作为一个 RDD,再处理。Spark Streaming 的处理方法。
表格 15 Storm、Spark streaming 和 Flink 比较
比点 | Storm | Spark Streaming | Flink |
---|---|---|---|
流模型 | Native | 准实时,微批处理 | 纯实时 Native |
延迟度 | 毫秒级 | 秒级 | 近毫秒级 |
健壮性/容错性 | ZooKeeper,Acker, 非常强 | Checkpoint,WAL, 一般 | Checkpoint |
事务机制 | 支持完善 | 支持,但不够完善 | |
动态调整并行度 | 支持 | 不支持 | |
回压 | No | Yes | Yes |
应用场景推 | 允许增量计算的高速事件处理系统。 | 迭代式数据处理 |
说明:
回压 Back Pressure:指当负载峰值导致数据流入速度超过组件实时处理能力的情况,这种情况可能导致处理工作停顿并可能丢失数据。
优劣分析
Spark Streaming,位于 Spark 生态技术栈中,因此 Spark Streaming 可以和 Spark Core、Spark SQL 无缝整合,也就意味着,我们可以对实时处理出来的中间数据,立即在程序中无缝进行延迟批处理、交互式查询等操作。这个特点大大增强了 Spark Streaming 的优势和功能。
如果你必须有状态的计算,恰好一次的递送,并且不介意高延迟的话,那么可以考虑 Spark Streaming,特别如果你还计划图形操作、机器学习或者访问 SQL 的话,Apache Spark 的 stack 允许你将一些 library 与数据流相结合(Spark SQL,Mllib,GraphX),它们会提供便捷的一体化编程模型。尤其是数据流算法(例如:K 均值流媒体) 允许 Spark 实时决策的促进。
Flink 支持增量迭代,具有对迭代自动优化的功能,在迭代式数据处理上,比 Spark 更突出,Flink 基于每个事件一行一行地流式处理,真正的流式计算,流式计算跟 Storm 性能差不多,支持毫秒级计算,而 Spark 则只能支持秒级计算。
表格 16 流式计算引擎比较列表
产品 | 模型 | API | 保证次数 | 容错机制 | 状态管理 Stateful | 延时 | 吞吐量 | 成熟度 |
---|---|---|---|---|---|---|---|---|
Strom | Native | 组合式 | At-least-once | Record ACKs | No | Very Low | Low | High |
Trident | mirco-batching | 组合式 | Exectly-once | Record ACKs | Yes(Operators) | Low | Low | High |
Spark streaming | mirco-batching | 声明式 | Exectly-once | RDD Checkpoint | Yes(Dstream) | Low | medium | High |
Flink | Native | 组合式 | Exectly-once | Checkpoint | 基于操作的状态管理 | Low | High | Low |
说明:
- 模型 Streaming Model
Naitve:数据进入立即处理;
Micro-Batch:数据流入后,先划分成 Micro-Batch,再处理;
- API 形式
组合式:操作更加基础的 API 操作,一步步精细控制,各组建组合定义成拓扑;
声明式:提供封装后的高阶函数。封装后可提供初步的优化;可提供窗口管理、状态管理等高级操作;
- 保证机制 Guarantees: 分布式系统的 消息传递语义 有三种类型分别是最多一次 at-most-once,至少一次 at-least-once 和正好一次 exactly-once。
At-least-once,至少一次,出错情况下需要执行多次;
Exectly-once,一次执行,保证 OK;
- 容错机制:监控 Guarantees
Record ACKs,每 Tuple 处理后经过 ACK 确认;
RDD Checkpoint,基于 RDD 做 Checkpoint。只需要重新计算特定 RDD;
Checkpoint:Flink 的 checkpoint,是一种快照(待补充详细介绍)
- 状态管理 Stateful
基于操作的状态管理:每次操作有一个状态;
基于数据的状态管理:每个数据有相应的处理状态;
- 延时 Latency & 吞吐量 Throughput
怎么样制定测试方案?
- 成熟度
产品成熟度,基于 Flink 已经在 2016.3 分布 1.0 版本,怎么界定成熟度?
本章参考
- 流式计算产品对比(Storm、Trident、Spark Streaming、Flink) https://blog.csdn.net/xianzhen376/article/details/51111911
- Apache 五大主流流计算框架详细对比 http://developer.51cto.com/art/201603/507444.htm
- Spark 与 storm 的对比 http://www.cnblogs.com/yaohaitao/p/5703288.html
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论