博客 / Others/ 什么是大数据处理框架?

什么是大数据处理框架?

什么是大数据处理框架?

大数据处理框架概念图
大数据处理框架发展历程

起源:从Google论文到Hadoop

大数据处理的历史,始于Google公司在2004年发表的经典论文《MapReduce: Simplified Data Processing on Large Clusters》。当时,随着互联网网页数量的爆炸式增长,Google内部需要处理海量的原始数据,如网页爬虫数据、请求日志等,并从中计算衍生数据,如倒排索引、网页图结构等。这些计算逻辑本身并不复杂,但数据量之大已远超单台计算机的处理能力。

为了解决分布式并行计算中的复杂性,如任务分配、数据分发和故障处理,Google设计了一套抽象模型。该模型借鉴了函数式编程语言(如Lisp)中的mapreduce思想:先对每条数据执行map操作生成中间键值对,再对相同键的值执行reduce操作进行合并。这一模型的关键贡献并非mapreduce概念本身,而在于它成功地将这套计算框架运行在由大量廉价PC机组成的集群上,从而实现了良好的横向扩展性和容错机制,标志着大数据计算从集中式迈向了分布式时代。

当时,Google内部有“三宝”:MapReduce、GFS(Google File System)和BigTable。但由于它们并未开源,外界无法使用。为此,开源社区诞生了Hadoop,其最初的MapReduce和HDFS(Hadoop Distributed File System)正是对Google的MapReduce和GFS的开源实现(BigTable的开源实现则是HBase)。自此,开源大数据处理框架的时代正式开启。

大数据基础概念

1. 什么是大数据?

“大数据”一词并无绝对统一的定义,但通常包含两层含义:

  • 大数据集:指数据规模巨大,以至于无法用传统数据库或单机工具进行有效捕捉、管理和处理。
  • 处理技术:指用于处理此类海量数据集的相关技术栈,包括数据采集、存储、计算、分析和可视化等。

2. 大数据的特征(3V模型)

Gartner分析师Doug Laney提出的“3V”模型概括了大数据的主要特征:

  • Volume(体量):数据规模巨大,通常达到PB甚至EB级别,必须采用分布式集群进行处理和存储。
  • Velocity(速度):数据生成、流入和处理的速度极快,往往要求近实时或实时处理,以尽快提取价值。
  • Variety(多样性):数据来源和格式多样,包括日志、社交媒体、传感器数据等,结构化和非结构化数据并存。

3. 大数据处理流程

一个典型的大数据处理流程通常包含以下环节:

  1. 数据接入:将数据从各种源系统引入大数据平台。
  2. 数据存储:将数据持久化到分布式存储系统(如HDFS)。
  3. 计算分析:利用计算框架对数据进行处理、分析和挖掘。
  4. 结果展示:将分析结果通过报表、可视化等方式呈现。

4. 大数据处理框架的定义

大数据处理框架是指负责对大数据进行计算的软件框架或引擎。它从存储系统或消息队列中读取数据,执行计算逻辑以提取信息。“大数据计算框架”、“大数据框架”等术语通常与之同义。有时“处理引擎”特指框架中负责核心计算操作的组件(如MapReduce之于Hadoop),而“框架”则包含更广泛的组件集合。

数据处理框架的分类

根据处理数据的性质和时效性要求,大数据处理框架主要分为三类:

  • 批处理系统:处理有限、静态的海量数据集,作业完成后输出结果,如Apache Hadoop。
  • 流处理系统:处理连续无界的实时数据流,注重低延迟,如Apache Storm、Apache Samza。
  • 混合处理系统:同时支持批处理和流处理,提供统一的编程模型,如Apache Spark、Apache Flink。

批处理系统

批处理系统专为处理大规模、静态的持久化数据而设计。其处理的数据集通常是有限的(如历史日志),处理完成后才输出最终结果。由于需要处理海量数据,批处理作业耗时较长,适合对延迟不敏感的分析场景,如数据仓库、离线报表等。

Apache Hadoop

Hadoop是开源大数据领域的奠基者,其核心组件包括:

  • HDFS:分布式文件系统,提供高容错、高吞吐的数据存储。
  • YARN:集群资源管理和调度系统。
  • MapReduce:基于磁盘的批处理计算引擎。

尽管MapReduce模型存在编程复杂、中间结果落盘导致迭代计算效率低等问题,其应用已逐渐减少,但HDFS和YARN仍是许多大数据生态组件的基础。Hadoop作为学习分布式计算原理的经典框架,依然具有重要价值。

流处理系统

流处理系统对连续不断接入的数据流进行实时处理,如同一个永不停止的“数据处理流水线”。它可分为:

  • 逐项处理:真正意义上的单条记录处理,延迟极低。
  • 微批处理:将一小段时间窗口内的数据作为一个微批次进行处理。

流处理适用于实时监控、欺诈检测、实时推荐等对时效性要求高的场景。

Apache Storm

Storm是一个低延迟的分布式流处理框架,核心概念包括:

  • Topology:由Spout和Bolt组成的有向无环图,定义流处理逻辑。
  • Spout:数据源,负责从外部系统读取数据并注入流中。
  • Bolt:处理单元,执行过滤、聚合、计算等操作。

Storm默认提供“至少一次”的语义保证。其扩展项目Trident提供了“恰好一次”语义,但采用了微批处理模型,会在一定程度上影响性能。

Apache Samza

Samza与Apache Kafka深度集成,其架构分为三层:

  1. 数据流层:由Kafka提供持久化、可重放的消息流。
  2. 执行层:由YARN负责资源管理和隔离。
  3. 处理层:Samza API提供流处理逻辑的编写接口。

对于已拥有Hadoop和Kafka基础设施的团队,Samza能很好地利用现有资源,并方便不同团队通过Kafka Topic进行数据协作。

混合处理系统

混合处理系统旨在用同一套API或框架处理批数据和流数据,简化技术栈和开发体验。

Apache Spark

Spark通过内存计算和先进的DAG调度引擎,大幅提升了处理性能。其核心优势包括:

  • 内存计算:使用弹性分布式数据集(RDD)缓存中间结果,减少磁盘I/O,特别适合迭代计算。
  • 统一的API:提供丰富的算子(Transformations和Actions),代码简洁。
  • 多语言支持:支持Scala、Java、Python和R。
  • 生态完整:包含Spark SQL(交互查询)、Spark Streaming(流处理)、MLlib(机器学习)、GraphX(图计算)等模块。

Spark Streaming采用微批处理模型,延迟通常在秒级。虽然其绝对延迟高于Storm等原生流框架,但其统一的编程模型和强大的生态使其成为目前应用最广泛的大数据处理框架之一。

Apache Flink

Flink采用了与Spark相反的哲学:它将批处理视为流处理的一种特例(即有界流)。这是一种“流处理优先”的Kappa架构。其核心概念包括:

  • DataStream API:用于处理无界数据流,支持真正的逐项处理,延迟极低。
  • DataSet API:用于批处理,本质上是对有界流的处理。
  • Operator:对数据流进行转换、计算的操作符。

Flink同样提供了Table API(类SQL)、CEP(复杂事件处理)、图计算和机器学习库。它在多项性能测试中表现优异,尤其在流处理延迟和吞吐方面优势明显。不过,其社区规模和大型企业生产案例目前仍少于Spark。

如何选择大数据处理框架?

对于学习者

  • Hadoop:理解分布式计算和存储的基础,建议作为入门学习的起点,尤其是HDFS和YARN。
  • Spark:目前企业应用的主流,生态繁荣,社区活跃,是求职和实战的首选技能。
  • Flink:代表“下一代”流处理方向,发展潜力大,适合关注前沿技术的学习者。

对于企业应用

  • 纯批处理、成本敏感:可考虑Hadoop MapReduce。
  • 纯流处理、超低延迟:Storm或Flink是更好选择。
  • 已有Kafka+Hadoop生态:Samza能很好集成。
  • 批流混合、技术栈统一:Spark是成熟稳健的选择;若对流处理性能有极致要求且愿意尝试新技术,可评估Flink。

学习资源推荐

最佳的学习起点永远是官方文档。此外,以下书籍可供参考:

Hadoop相关

  • 《Hadoop权威指南》(“大象书”):全面介绍Hadoop核心及生态。
  • 《YARN权威指南》:深入讲解资源管理框架YARN。

Spark相关

  • 《Spark快速大数据分析》:经典入门书籍,涵盖核心概念。
  • 《Spark高级数据分析》:适合有一定基础后,学习数据分析与机器学习应用。

请注意,技术发展迅速,书籍可能存在版本滞后问题,建议结合官方最新文档进行学习。对于Samza、Flink等较新框架,目前优质的中文书籍较少,更依赖官方文档和社区资源。

发表评论

您的邮箱不会公开。必填项已用 * 标注。