跳转至

Spark

Apache Spark 是一个面向大规模数据处理的统一分析引擎,适合批处理、交互式分析、流处理和机器学习等场景。它最大的特点是提供了统一的计算框架,并尽可能通过内存计算来提升处理效率。

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:如 mapfilter,描述如何转换数据,通常是惰性执行。
  • Action:如 countcollectsave,会真正触发计算。

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
  • 在很多实际系统中,两者也会组合使用。