大数据计算框架的理解与对比
大数据计算框架负责对系统中产生中的数据进行计算。数据的计算则是指从大量单一数据点中提取信息和见解的过程。按照时效性与处理机制分为流处理、批处理和混合模式。
批处理:适合处理对时间要求不高的非常大规模的数据集。具有三个特征:有界,持久,海量。经常应用于历史数据的分析工作。
流处理:适合处理对数据变动或峰值做出实时响应,并且关注一段时间变化趋势的数据。具有特征:无边界、维持少量状态、实时性。经常应用于基于时间衡量指标的实时分析工作。
对于流处理需要具有低延迟、快速容错、快速恢复特点,在技术框架选型选型与调优具有更高的挑战性。
流式处理需关注几点:
1.数据倾斜问题,如何处理?
2.慢节点问题,该如何处理?
3.分布式集群,性能如何完全利用打满?
4.状态计算join问题,如何存储中间结果?
5.如何快速迁移,数据快速恢复?
如下各个开源框架对比理解:
开源框架 | 应用场景 | 特性 | 优点 | 缺点 | 描述 |
Hadoop | 批处理 | 基于hdfs存储 基于yarn集群协调 基于MapReduce 原生引擎 | 处理海量数据集 | 不适合时间要求较高场景 | |
Storm | 流处理 | 基于stream无边界流式数据 基于spout产生 基于bolt消耗 | 处理数据极低延迟 支持多种语言 | 至少处理一次保证 消息处理无序 高层api弱 无状态,数据容错困难 | 近实时处理领域的最佳解决方案。 |
Samza | 流处理 | 基于topic 基于partition 基于broker 基于producer、consumer | 发挥与kafka耦合实现低成本订阅与输出 避免数据回压(backpressuer) | 至少一次保证 只支持jvm语言
| Samza本身很适合有多个团队需要使用(但相互之间并不一定紧密协调)不同处理阶段的多个数据流的组织 |
Spark | 混合处理(批与流) | 基于RDD(弹性分布式数据集)模型 主要面向批处理工作 | 处理多样性(批处理与流处理) 集成多种生态系统 | 流处理基于microbatch调度开销大 | Spark流处理亚秒级增量对流进行缓冲,随后这些缓冲会作为小规模的固定数据集进行批处理 |
Flink | 混合处理(流与批) | 基于stream无边界数据 基于operator产生数据到其它数据流功能 基于source数据流入口 基于sink输出其它系统 主要面向流处理模型 | 处理数据低延迟 精确一次保证 设计具有状态及流控 | 年幼项目,未经大规模部署考验 | 最适合有极高流处理需求,并有少量批处理任务的组织。该技术可兼容原生Storm和Hadoop程序,可在YARN管理的集群上运行 |