Spark 篇:为什么 Spark 适合大规模离线计算

Spark 通过 Driver、Executor、RDD、DataFrame 和 Spark SQL 组成一套通用分布式计算引擎,尤其适合大规模离线 ETL 和分析。

Spark 篇:为什么 Spark 适合大规模离线计算

Spark 的出现,很大程度上是为了解决 MapReduce 写起来重、迭代慢、表达能力弱的问题。它用更通用的计算模型和内存计算能力,成为离线 ETL、数据分析和机器学习里的常见选择。

Rendering diagram...

Driver 和 Executor

Driver 是 Spark 应用的控制端,负责生成作业、切分 Stage、调度 Task。

Executor 运行在 Worker 节点上,负责真正执行 Task、缓存数据、读写 Shuffle。

这种架构让 Spark 可以把一个大作业拆成大量并行任务执行。

RDD

RDD 是 Resilient Distributed Dataset,弹性分布式数据集。它是 Spark 早期最核心的抽象。

RDD 支持 map、filter、reduceByKey 等转换操作,也能通过 lineage 实现容错。如果某个分区丢失,可以根据依赖关系重新计算。

lines = sc.textFile("s3://logs/app.log")
errors = lines.filter(lambda line: "ERROR" in line)
counts = errors.map(lambda line: (line.split()[0], 1)).reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("s3://result/error-count")

DataFrame 和 Spark SQL

现代 Spark 使用 DataFrame 和 Spark SQL 更多。DataFrame 带有结构信息,优化器可以理解列、类型、过滤条件和 Join。

df = spark.read.parquet("s3://warehouse/orders")
df.groupBy("order_date").sum("amount").show()

相比 RDD,DataFrame 更容易被 Catalyst 优化器优化,也更适合数据仓库 ETL。

Spark 适合什么

Spark 适合:

  • 离线 ETL。
  • 大规模批处理。
  • 数据湖加工。
  • 特征工程。
  • 交互式分析。
  • 机器学习批训练。

不太适合极低延迟、强状态实时处理和复杂事件时间语义,这些场景 Flink 往往更自然。

小结

Spark 是通用分布式批处理引擎。Driver/Executor 架构负责调度和执行,RDD 提供底层弹性抽象,DataFrame/Spark SQL 提供高级优化能力。

参考链接