Spark
Apache Spark 是一个面向大规模数据处理的统一分析引擎,适合批处理、交互式分析、流处理和机器学习等场景。它最大的特点是提供了统一的计算框架,并尽可能通过内存计算来提升处理效率。
Spark 可以运行在独立集群、YARN、Kubernetes 和云环境中,也可以与 Hadoop 生态协同工作。它同时提供 Java、Scala、Python(PySpark)和 R API,适合数据工程师、分析师和数据科学家使用。
核心模块
Spark 不只是一个单独的计算框架,而是一组统一的数据处理组件:
Spark Core:提供任务调度、内存管理、容错机制和基础分布式计算能力。Spark SQL:用于结构化数据处理,支持 SQL、DataFrame 和 Dataset。Structured Streaming:用于流式数据处理,采用统一的批流处理模型。MLlib:提供常见机器学习算法和特征处理能力。GraphX:用于图计算与图分析。
常见概念
RDD:Spark 最基础的数据抽象,强调分布式、不可变和容错。DataFrame:带有结构化 Schema 的分布式数据集,开发中更常用。Dataset:在 DataFrame 基础上增加类型信息,主要常见于 Scala/Java。Transformation:如map、filter,描述如何转换数据,通常是惰性执行。Action:如count、collect、save,会真正触发计算。
Spark 为什么快
Spark 的性能优势主要来自:
- 以内存计算为主,减少频繁磁盘 I/O;
- 使用 DAG 调度优化多阶段任务执行;
- 提供缓存(
cache/persist)机制,适合迭代计算与交互式分析。
适用场景
Spark 通常适用于以下任务:
- 大规模离线 ETL 和数据清洗;
- 交互式查询与分析;
- 机器学习训练与特征工程;
- 准实时或微批流处理;
- 需要统一处理批数据与流数据的场景。
Spark 与 Hadoop
何时使用 Apache Spark,何时使用 Apache Hadoop?
Hadoop 的经典 MapReduce 更偏向磁盘驱动型计算,适合超大规模、对实时性要求不高、成本敏感的批处理任务;Spark 则更灵活,通常通过内存加速获得更低延迟和更高开发效率。
Spark 并不是 Hadoop 的简单替代品,它常常作为 Hadoop 生态中的计算引擎运行,例如配合 HDFS 做存储、配合 YARN 做资源管理。
简单理解:
- 更关注低延迟、迭代计算、统一开发体验时,优先考虑
Spark; - 更关注海量数据的稳定离线处理,且资源成本更敏感时,可考虑
Hadoop MapReduce; - 在很多实际系统中,两者也会组合使用。